C++ Filehandling: Difference between ios:app and i

2019-01-06 14:49发布

问题:

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 programm 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.