C ++随机访问文件位置

时间:2018-01-21 10:10:12

标签: c++ file-io random-access

我失败了,因为我在这里遗漏了一些非常简单的东西,但我无法弄清楚是什么。

我有一个类Line表示文件中的一行,GetText成员函数读取该行,如下所示:

class Line {
    streampos pos_;
    ifstream &file_;
public:
    Line(ifstream &f, streampos pos): pos_(pos), file_(f) { }

    string GetText() const {
        string line;
        // Note the current pos and state
        streampos tpos = file_.tellg();
        iosbase::iostate state = file_.rdstate(); file_.clear();
        file_.seekg(pos_, file_.beg);
        getline(file_, line);
        file_.seekg(tpos, file_.beg); file_.setstate(state);
        return line;
    }
};

我有这个程序应该打印文件的所有行,使用类:

streampos c = f.tellg();
while (getline(f, line)) {
    Line l(f, c); 
    cout << l.GetText() << endl;
    c = f.tellg();
}

请忽略我上面打印line的脸部。当我在非常简单的输入文件上运行它时

This is line1
This is line2
This is line3

而不是打印出所有行,输出为:

This is line1
his is line2

&#39;&#39;缺少,第三行没有打印。甚至更奇怪的是,第二行的输出取决于行数!随机跳跃的问题是什么?我已经坚持了几个小时。

0 个答案:

没有答案