C++ Filehandling: Difference between ios::app and ios::ate?

烂漫一生 提交于 2019-11-26 08:12:16

问题


What\'s the difference between ios::ate and ios:app when writing to a file.
In my view, ios::app gives you the ability to move around in the file, whereas with ios::ate it can only read/write at the end of the file. Is this correct?


回答1:


It’s the other way around. When ios::ate is set, the initial position will be the end of the file, but you are free to seek thereafter. When ios::app is set, all output operations are performed at the end of the file. Since all writes are implicitly preceded by seeks, there is no way to write elsewhere.




回答2:


They are specified as follows (in 27.5.3.1.4 of C++11):

app seek to end before each write

ate open and seek to end immediately after opening

With ios::app the write position in the file is "sticky" -- all writes are at the end, no matter where you seek.




回答3:


It is pretty good documented here.

ios::ate "sets the stream's position indicator to the end of the stream on opening."

ios::app "set the stream's position indicator to the end of the stream before each output operation."

This means the difference that ios::ate puts your position to the end of the file when you open it. ios::app instead puts it at the end of the file every time you flush your stream. If for example you two programs that write to the same log file ios::ate will override anything that was added to the file by the other program since your program opened it. ios:app will instead jump to the end of file each time your program adds a log entry.




回答4:


App, "We cannot move the pointer. It will be only at end."

Ate, "We can move the record pointer to any other place."




回答5:


The ios::ate option is for input and output operations and ios::app allows us to add data to the end of file.



来源:https://stackoverflow.com/questions/10359702/c-filehandling-difference-between-iosapp-and-iosate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!