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