新手上路,老鸟笑笑路过哦,谢谢!!!
前几天写了一段写文件的小程序。大致要求是这样的。从数据库将数据读出来,然后按照固定的格式写入文件,每个文件最多只能有固定行(可配置)。当一个文件写完之后需要另起一个文件,文件名中会有一个序列号,如,文件名如下:aaa.0000.dat
其中一段代码如下:
FILE *fp = fopen(strFileNametmp.c_str(),"a+");
if (fp == NULL)
{
return -1;
}
while(!osSel.eof())
{
osSel >> a1 >> a2 >> a3 >> a4 >> a5 >> a6 >> a7 >> a8 >> a9 >> a10;
int32 rv1 = snprintf(pbuff, sizeof(pbuff), format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);//format为文件格式字符串,如"%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;"
if ( rv1 <= 0 )
{
return -1;
}
else
{
if ( rowCount++ >= MaxRowNumber)//MaxRowNumber是文件最大行数
{
rowCount = 0;//rowCount行计数器,记录当前文件行数
fileCount++;//fileCount文件计数器,记录当前文件序列号
strFileNametmp = m_strFileName;//文件名
sprintf(buff,".%06d.dat", fileCount);
strFileNametmp += buff;
fclose(fp);
fp = fopen(strFileNametmp.c_str(),"a+");
if (fp == NULL)
{
return -1;
}
}
fputs(pbuff,fp);
}
}
fclose(fp);
不过,这段代码是有一个逻辑上面的BUG的,最后我找了好久才找出来的,亲,你能找出来么?在稍后的回复中会有bug分析的哦。嘿嘿。请允许俺卖个关子。