4

我有一个std::ifstream对象:

std::ifstream file(file_path);

我从中读到几行:

std::getline(file, line);

在流打开时从另一个地方向该文件添加行是否合法?例如,即使我在 C++ 程序中达到 EOF,是否可以通过文本编辑器添加行,并getline再次调用以获取新添加的行?标准是怎么说的?

4

1 回答 1

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;
    }
}
于 2013-07-19T13:44:14.110 回答