gpt4 book ai didi

c++ - ifstream.read() 如果读取的数据少于可用数据则设置失败位

转载 作者:行者123 更新时间:2023-11-28 00:56:20 26 4
gpt4 key购买 nike

std::ifstream sr(path.c_str());
if (!sr)
throw runtime_error("Could not open file '"+path+"\'");

sr.seekg(0, ios::end);
streampos lastPos = sr.tellg(); //returns 3161125
unsigned dataSize = (int)lastPos - 100; //dataSize becomes 3161025

char* data = (char*)malloc(dataSize);
if (!data)
throw runtime_error("Out of memory whean allocating read buffer");
sr.clear();
sr.seekg(0, ios::beg);
sr.read(data, dataSize); //sr.read(data, 3110000) works!
if(sr.fail()) //fails

此代码失败,但如果我读取 3110000 字节,则 read() 成功并且 fail()false。我可以像这样通过流迭代器加载文件:

string data(std::istreambuf_iterator<char>(sr),
std::istreambuf_iterator<char>());

知道为什么 read() 失败了吗?

最佳答案

seekg() + tellg() 返回的值只有在文件以二进制模式打开时才是可靠的。在文本模式下,行尾会被翻译,根据操作系统存储文件的方式,结果会有所不同。

具体来说,在 Windows 上,CR+LF 对被转换为单个字符 '\n'

关于c++ - ifstream.read() 如果读取的数据少于可用数据则设置失败位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11039530/

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