CFile读取0个字节

时间:2012-05-22 19:13:27

标签: c++ file-io mfc cfile

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

1 个答案:

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