问题
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):
appseek to end before each write
ateopen 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