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

前端 未结 5 1230
轻奢々
轻奢々 2020-11-28 06:13

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 aro

相关标签:
5条回答
  • 2020-11-28 06:50

    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.

    0 讨论(0)
  • 2020-11-28 06:54

    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.

    0 讨论(0)
  • 2020-11-28 07:00

    ios::app--> "We cannot move the pointer. It will be only at end."

    ios::ate--> "We can move the record pointer to any other place."

    0 讨论(0)
  • 2020-11-28 07:01

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

    0 讨论(0)
  • 2020-11-28 07:15

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

    0 讨论(0)
提交回复
热议问题