我有一个std::ifstream
对象:
std::ifstream file(file_path);
我从中读到几行:
std::getline(file, line);
在流打开时从另一个地方向该文件添加行是否合法?例如,即使我在 C++ 程序中达到 EOF,是否可以通过文本编辑器添加行,并getline
再次调用以获取新添加的行?标准是怎么说的?
这是合法的,它应该在最合理的操作系统上做你所期望的。请注意,如果您到达 EOF,则需要清除输入流。输出流需要以一种或另一种方式刷新。下面的代码说明了这一点。
#include <iostream>
#include <fstream>
#include <string>
int main()
{
const char *f = "f.txt";
// create an empty file
std::ofstream os(f);
os.close();
std::ifstream is(f);
for (unsigned i = 1; 3 > i; ++i)
{
os.open(f, std::ios_base::out | std::ios_base::app);
os << "line " << i << std::endl;
os.close();
std::string s;
is.clear();
std::getline(is, s);
std::cerr << s << std::endl;
}
os.open(f, std::ios_base::out | std::ios_base::app);
for (unsigned i = 3; 6 > i; ++i)
{
os << "line " << i << std::endl;
os.flush();
std::string s;
is.clear();
std::getline(is, s);
std::cerr << s << std::endl;
}
}