c++ - 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 之后立即寻找到流的末尾。
解决方案
我认为附加模式就足以满足您的要求:
fstream f.open("file.txt", ios::app );
或者,您也可以在编写之前使用 seekp,尽管它不是首选。
推荐阅读
- c# - Application.UseWaitCursor 有时会延迟
- c# - 四舍五入小数点后半
- c# - 使用两列之一将表连接到另一个表
- java - 在工厂设计模式中创建类
- docker - docker-compose 与 rabbitmq
- css - 将额外的项目发送到下一列 CSS
- javascript - EISDIR:在写入名为“css”的文件时对目录进行非法操作
- jquery - 将所有页面中的复选框值从 jQuery DataTables 提交到控制器
- function - 在 Azure 函数中运行许多长时间等待的最佳实践
- django - 如何修复 django rest 框架中的 ImageField 上传?