对于一般文件的读取,建议还是用CStdioFile来进行行的读与写操作,这样非常方便的.
[问题提出]
一数据文件一行一条记录,我用file.readstring()一次读一行,并对读取的数据做一些处理;
请问:while(文件还没到结尾)
{
file.readstring();
...
}
??文件还没到结尾如何判断?
如果,到了指定位置不读了,过一会儿再读又如何做?
[解决方法]
while()中不用另加判断条件了,因为CStdioFile::ReadString()本身就是判断标志,若没有了(文件到头)返回NULL,因此:while(file.ReadString(s)){}就可.
[程序实现]
假设你已有了名为ts.txt的文件在你的工程目录下:
{
CStdioFile file;
CString sss;
char ccc[100];
DWORD o=0;
int ol=0;
file.Open("ts.txt",CFile::modeRead);
while(file.ReadString(sss))
{
ol++;
if(ol>1)//读两次就不读了.
break;
}
o=file.GetPosition();//记录上次的结果(读到哪了)
.................
file.Seek(o,0);//接着上回读
while(file.ReadString(sss))
{
strcpy(ccc,sss);
AfxMessageBox(ccc);
}
}
注意:当文件的最后一行数据,正好是128的倍数个字符的时候,用ReadString读取,一定会返回FALSE。但实际上读取是成功的,返回的CString中的数据是正确的。(VC6.0中存在这个Bug,VS2005中,没有这个Bug)。
解决办法是修改循环结束的条件:
while (file.ReadString(strLine) != FALSE || sss.GetLength() != 0) 在返回FALSE的情况下,CString的长度不为0,就不算读取失败。
或者这样: if(!file.ReadString(str) && sss.GetLength() == 0) 在返回FALSE并且CString的长度为0,则算读取失败,否则就是读取成功。