gpt4 book ai didi

c++ - CFile 读取 0 个字节

转载 作者:行者123 更新时间:2023-11-28 08:03:55 25 4
gpt4 key购买 nike

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

最佳答案

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

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

关于c++ - CFile 读取 0 个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com