Подтвердить что ты не робот

С++ Обработка файлов: разница между ios :: app и ios :: ate?

Какая разница между ios::ate и ios:app при записи в файл.
На мой взгляд, ios::app дает вам возможность передвигаться в файле, тогда как с ios::ate он может только читать/писать в конце файла. Правильно ли это?

4b9b3361

Ответ 1

Это наоборот. Когда ios::ate установлено, начальная позиция будет концом файла, но после этого вы можете искать ее. Когда ios::app установлен, все выходные операции выполняются в конце файла. Поскольку все записи неявно предваряются поисками, нет способа писать где-либо еще.

Ответ 2

Они указаны следующим образом (в 27.5.3.1.4 из С++ 11):

app попытаться закончить перед каждой записью

ate откройте и попытайтесь закончить сразу после открытия

С ios::app позиция записи в файле "липкая" - все записи находятся в конце, независимо от того, где вы ищете.

Ответ 3

Это довольно хорошо задокументировано здесь.

ios::ate "устанавливает индикатор позиции потока в конец потока при открытии."

ios::app "установить индикатор положения потока в конец потока перед каждой операцией вывода."

Это означает, что ios::ate помещает вашу позицию в конец файла при его открытии. Вместо этого ios::app помещает его в конец файла каждый раз, когда вы очищаете свой поток. Например, если вы две программы, которые пишут в один и тот же файл журнала, ios::ate переопределит все, что было добавлено в файл другой программой, так как ваша программа открыла его. ios:app вместо этого ios:app будет переходить в конец файла каждый раз, когда ваша программа добавляет запись в журнал.

Ответ 4

App:

мы не можем переместить указатель. Он будет только в конце

Ела:

мы можем переместить указатель записи в любое другое место

Ответ 5

Опция ios::ate предназначена для операций ввода и вывода, а ios::app позволяет нам добавлять данные в конец файла.