我像这样打开一个文件(因为这是练习的一部分,它可能需要覆盖文件):
#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::in
和std::ios::out
,因为它们是构造函数中的默认值。(更确切地说,是std::ios_base::in/out
。std::ios
(std::basic_ios<char>
)继承自std::ios_base
)
所以std::fstream file(filename)
的工作原理相同。
这里的问题是c++流如何工作。
当文件读取完成时,设置eofbit
。在此之后,另一次读取将触发failbit
,因为没有东西可读,并且流的bool转换操作符返回false并退出循环。
位将一直保持打开,直到它们被清除。当它们打开时,流不会做任何事情。
清除它们:
file.clear();
将做这项工作。您可以使用之后的流。