0

使用 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写的

4

1 回答 1

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 应用程序中使用。

于 2012-05-22T21:40:48.457 回答