gpt4 book ai didi

即使 gcount 返回 0,C++ iostream 也不会设置 eof 位

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

我正在windows下开发一个应用程序,我正在使用fstreams来读写文件。

我正在用这样打开的 fstream 写作:

fs.open(this->filename.c_str(), std::ios::in|std::ios::out|std::ios::binary);

并用这个命令写

fs.write(reinterpret_cast<char*>(&e.element), sizeof(T));

每次写入后关闭文件

fs.close()

用 ifstream 阅读是这样打开的:

is.open(filename, std::ios::in);

并使用此命令阅读:

is.read(reinterpret_cast<char*>(&e.element), sizeof(T));

写入正常。但是,我以这种方式循环阅读:

while(!is.eof())
{
is.read(reinterpret_cast<char*>(&e.element), sizeof(T));
}

程序继续读取,即使应该到达文件末尾。 istellg pos为0,gcount也为0,但fail位和eof位都正常。

我快疯了,需要一些帮助......

最佳答案

试试这个:

while(is.read(reinterpret_cast<char*>(&e.element), sizeof(T))) {}

此外,您还应该使用 binary 标志打开 istream:

is.open(filename, std::ios::in | std:ios::binary);

如果它永远读取,它读取的是什么? T 是什么类型?

关于即使 gcount 返回 0,C++ iostream 也不会设置 eof 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2631926/

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