首页 > 解决方案 > ios::ate 没有移动到文件末尾

问题描述

我有这个小程序。

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    fstream f("file.txt", ios::out);
    f << "Hello world!" << endl;
    f.close();

    fstream atEnd("file.txt", ios::out | ios::ate);
    cout << "Position: " << atEnd.tellp() << endl;
    atEnd << "You too" << endl;
    atEnd.close();

    return 0;
}

它应该打开文件,向其中写入一些内容,然后将其关闭并在最后重新打开,因此应该在文件末尾附加文本“You too”。但位置始终为 0,内容被重写:https ://www.onlinegdb.com/online_c++_compiler 。为什么会这样?根据文档,ios::ate应该在 open 之后立即寻找到流的末尾

标签: c++stream

解决方案


我认为附加模式就足以满足您的要求: fstream f.open("file.txt", ios::app );

或者,您也可以在编写之前使用 seekp,尽管它不是首选。


推荐阅读