如何在std::fstream结束后追加(std::fstream::eof()为真)



我像这样打开一个文件(因为这是练习的一部分,它可能需要覆盖文件):

#include <fstream>            //std::fstream.
std::fstream file("file.txt", std::ios::in | std::ios::out);

假设我已经读取了一个文件,直到文件的末尾(到达文件的末尾)。

std::string tmp_buff;
while(std::getline(file, tmp_buff)) {}
file.seekp(file.tellg());

现在我已经到了流的末尾,我如何从这里追加到文件。因为如果我只是试着像平常一样写,它会失败(它实际上不会写):

file << "Text";

我找到的解决方案是在文件末尾重新打开文件:

if(file.eof())
{
file.close();
file.open("file.txt", std::ios::in | std::ios::out | std::ios::app);
file << 'n';
}

如有任何帮助,不胜感激。

首先,使用fstream时不需要声明std::ios::instd::ios::out,因为它们是构造函数中的默认值。(更确切地说,是std::ios_base::in/outstd::ios(std::basic_ios<char>)继承自std::ios_base)
所以std::fstream file(filename)的工作原理相同。

这里的问题是c++流如何工作。
当文件读取完成时,设置eofbit。在此之后,另一次读取将触发failbit,因为没有东西可读,并且流的bool转换操作符返回false并退出循环。

将一直保持打开,直到它们被清除。当它们打开时,流不会做任何事情。
清除它们:

file.clear();

将做这项工作。您可以使用之后的流。

相关内容

  • 没有找到相关文章

最新更新