C ++文件处理:ios :: app和ios :: ate之间的区别?


71

ios::ateios:app写入文件之间有什么区别。
在我看来,ios::app您可以在文件中四处移动,而ios::ate只能在文件末尾读/写。这个对吗?


顺便说一句,确实是ios_base::ateios_base::app
LF

Answers:


77

相反。当ios::ate设定,初始位置将是文件的末尾,但你可以自由此后寻求。当ios::app设置,所有的输出操作都在文件的末尾进行。由于所有写入都隐含在查找之前,因此无法在其他位置进行写入。


38

它们被指定如下(在C ++ 11的27.5.3.1.4中):

app 在每次写之前寻求结束

ate 打开并尝试在打开后立即结束

随着ios::app文件中写入位置是“粘” -所有的写操作都在最后,无论你在哪里寻找。


29

这里记录的很好。

ios::ate “将流的位置指示器设置为打开时流的末尾。”

ios::app “在每次输出操作之前,将流的位置指示器设置为流的末尾。”

这意味着不同之处在于ios::ate打开文件时将其位置放到文件末尾。ios::app而是在每次刷新流时将其放在文件末尾。例如,如果您两个写入同一日志文件的程序ios::ate将覆盖自另一个程序自打开该程序以来添加到该文件的任何内容。ios:app每当您的程序添加日志条目时,它将跳到文件末尾。


12

ios::app->“我们不能移动指针。它只会在末端。”

ios::ate->“我们可以将记录指针移到其他任何地方。”


1

ios::ate选项用于输入和输出操作,并 ios::app允许我们将数据添加到文件末尾。


您可以提供文档链接吗?
harvpan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.