我有一个std::ifstream
对象:
std::ifstream file(file_path);
我从中读取了一行:
std::getline(file, line);
在流打开时从其他位置向此文件添加行是否合法?例如。即使我在C ++程序中达到EOF,也可以通过文本编辑器添加行,并再次调用getline
来获取新添加的行?标准说了什么?
答案 0 :(得分:0)
这是合法的,它应该在大多数合理的操作系统上做你期望的事情。请注意,如果达到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;
}
}