Какая разница между ios::ate и ios:app при записи в файл.
На мой взгляд, ios::app дает вам возможность передвигаться в файле, тогда как с ios::ate он может только читать/писать в конце файла. Правильно ли это?
С++ Обработка файлов: разница между ios :: app и ios :: ate?
Ответ 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 позволяет нам добавлять данные в конец файла.