2008年1月22日星期二

VC++ 从数据文件一次读一行

[问题提出]
一数据文件一行一条记录,我用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);
}

}

我的代码:
int CDBinfoListCt::checkReport(CString sReportFile)
{
CStdioFile file;
CString str;
CString sDollar("$$$");
CString sProtocolOK("OK!");
try
{
if (file.Open(sReportFile,CFile::modeRead|CFile::shareDenyNone))
{
while(file.ReadString(str))
{
if(str.Find(sDollar) != -1 && str.Find(sProtocolOK) != -1)
{ //AfxMessageBox("no error for a3000.bat: "+ str);
return NOT_ERROR;
}
}
}
else
{
return OPEN_FILE_FAILED;
}
}
catch(CFileException *e)
{
CString str;
str.Format("reason:%d",e->m_cause);
AfxMessageBox((LPCTSTR)str); //error C2660: 'MessageBoxA' : Funktion akzeptiert keine 1 Parameter
file.Abort();
e->Delete();
}
return REPORT_ERROR;
}

没有评论: