首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >CFile读取0字节

CFile读取0字节
EN

Stack Overflow用户
提问于 2012-05-23 03:13:27
回答 1查看 1.2K关注 0票数 0

在使用CFile时,由于某种原因,我对read()的调用在第一次调用后返回0字节

代码语言:javascript
复制
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写的。

EN

回答 1

Stack Overflow用户

发布于 2012-05-23 05:40:48

如果您有以零结尾字符串的文件,则应将其视为二进制而不是文本。这是一种可能的解决方案,它将从字符串的开头读取到下一个终止零字符。

代码语言:javascript
复制
    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应用程序中使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10708550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档