Какая разница между 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
позволяет нам добавлять данные в конец файла.