使用CFile时,出于某种原因,我对read()的调用在第一次调用后返回0个字节
CFile iniFile;
int bytesRead=0;
char buffer[_MAX_PATH];
if(iniFile.Open(iniDirFilename,CFile::modeRead)){
bytesRead += iniFile.Read(buffer,_MAX_PATH); // read file path
SaveDirectoryBox->SetWindowTextA(buffer);
iniFile.Seek(bytesRead,CFile::begin); // reposition pointer
int x =iniFile.GetLength();
int y =iniFile.GetPosition();
bytesRead += iniFile.Read(buffer,_MAX_PATH); // read subfile path
subSaveDirectoryBox->SetWindowTextA(buffer);
iniFile.Seek(bytesRead,CFile::begin); // reposition pointer
}
它告诉我文件长度只有72个字节,当我知道它显然更多。 我保存了一堆空终止字符串。例如 “你好” 我怀疑在构造时,CFile类会查找第一个NULL字符并将其称为文件末尾。我尝试使用setLength()函数,但这给了我一个错误
如何阅读文件的其余部分?
我应该提一下,我的项目设置为读取ascii中的写入。该文件也是用ascii编写的
答案 0 :(得分:1)
如果文件的终止字符串为零,则应将其视为二进制而不是文本。 这是一个可能的解决方案,它将从开头到下一个终止零字符读取字符串。
ULONGLONG iTotalBuffSize = 0;
CFile iniFile(_T("TestFile.txt"), CFile::modeRead);
iTotalBuffSize = iniFile.GetLength();
TCHAR* pBuff = new TCHAR[(UINT)iTotalBuffSize];
iniFile.Read(pBuff, (UINT)iTotalBuffSize);
while(0 != *pBuff)
{
CString csText(pBuff); // this is your n-th string
TRACE(_T("%s\n"), csText);
pBuff += csText.GetLength() + sizeof(TCHAR);
}
我使用通用文本映射编写了这个代码,因此代码可以在UNICODE和ANSI应用程序中使用。