C++ Filehandling: разница между ios: app и ios:ate?

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

5 ответов


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


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

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

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

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


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

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

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

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


App:

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

ел:

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


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