在开放文件中添加行?

时间:2013-06-14 15:49:42

标签: c++ file-io

我有一个std::ifstream对象:

std::ifstream file(file_path);

我从中读取了一行:

std::getline(file, line);

在流打开时从其他位置向此文件添加行是否合法?例如。即使我在C ++程序中达到EOF,也可以通过文本编辑器添加行,并再次调用getline来获取新添加的行?标准说了什么?

1 个答案:

答案 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;
    }
}