在使用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个字节,而我知道它显然更多。我保存了一堆以null结尾的字符串。例如"Hello“,我怀疑在构造时,CFile类会查找第一个空字符,并将其称为文件末尾。我尝试使用setLength()函数,但出现错误
如何读取文件的其余部分?
编辑:
我应该提一下,我的项目设置为在ascii中读写。而且这个文件也是用ascii写的。
发布于 2012-05-23 05:40:48
如果您有以零结尾字符串的文件,则应将其视为二进制而不是文本。这是一种可能的解决方案,它将从字符串的开头读取到下一个终止零字符。
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应用程序中使用。
https://stackoverflow.com/questions/10708550
复制相似问题