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.