为什么当一个流被打开时,它被截断了 ios::ate 和 ios::out 标志
Why is an fstream truncated when it is opened with the flags ios::ate and ios::out?
我用ios::ate和ios::out标志打开了我的fstream,我注意到文件被截断了。如果我还设置了一个标志ios::in,则不会出现此问题。然后输出和输入位置就可以了。但我的问题是,如果在未设置 ios::in 标志的情况下文件被截断,则 ios::ate 标志的含义是什么?
尽管标准中有含义,但ios::ate实际上与是否发生截断没有任何关系。
在内部,fstream 对象有一个缓冲区(filebuf 对象)。在写入时缓冲区的内容是否附加到文件中,完全取决于 ios::in 和 ios::out 的组合 - 您需要同时追加两者。(或 ios::app)
ios::ate 不会附加缓冲区 - 它可以帮助您计算文件大小和文件中的相对位置。不同的东西。
有关各种模式的讨论,请参阅此问题 - 您会注意到ios::ate对模式没有影响,并且您需要in|out(或app)才能获得+。
相关文章:
- 使用ios:ate写入到流会覆盖现有文件
- 如何访问RTCVideoRenderer的帧?(ios)
- IN, OUT, INOUT Parameters
- 即使使用调试编译标志,表达式也是"optimized out"
- ios::fmtflags 在 C++ 中是如何工作的?setf() 是如何工作的?
- C++双重释放或损坏(out)
- 我可以在 iOS 或 mac 应用程序中使用C++代码吗?
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- 为什么 C++ 11 在 ios 类中添加了运算符 bool
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- 'string'文件在带有C++文件的iOS插件上找不到
- 为什么我的向量::擦除调用会抛出"vector subscript out of range"?
- 文件模式标志"ios::app"是否用于删除文件(如果文件已存在)?
- 解决方案在第 25 行执行错误'out of bounds'
- c++ 中的 ios::app、out 和 trunc 有什么区别?
- 为什么当一个流被打开时,它被截断了 ios::ate 和 ios::out 标志
- C++:ios:app在fstream中不需要ios:out
- fstream::open() Unicode 或非 ASCII 字符在 Windows 上不起作用(使用 std::ios::out)
- ios::app 不也暗示 ios::out 在C++