ファイルに書き込むときios::ate
との違いは何ですか。
私の見解では、ファイル内を移動する機能を提供しますが、ファイルの最後でのみ読み取り/書き込みができます。これは正しいです?ios:app
ios::app
ios::ate
6 に答える
それは逆です。が設定されている場合ios::ate
、最初の位置はファイルの最後になりますが、その後は自由にシークできます。ios::app
が設定されている場合、すべての出力操作はファイルの最後で実行されます。すべての書き込みはシークによって暗黙的に先行されるため、他の場所に書き込む方法はありません。
それらは次のように指定されています (C++11 の 27.5.3.1.4 で)。
app
各書き込みの前に終了を求める
ate
開いて、開いた直後に終了を求める
ファイル内のios::app
書き込み位置は「スティッキー」です。どこを探しても、すべての書き込みは最後にあります。
hereにかなりよく文書化されています。
ios::ate
"ストリームを開くときに、ストリームの位置インジケータをストリームの末尾に設定します。"
ios::app
「各出力操作の前に、ストリームの位置インジケータをストリームの最後に設定します。」
つまり、違いはios::ate
、ファイルを開いたときに位置がファイルの最後になることです。ios::app
代わりに、ストリームをフラッシュするたびにファイルの最後に配置します。たとえば、同じログ ファイルに書き込む 2 つのプログラムがある場合、 は、プログラムがios::ate
ファイルを開いてから他のプログラムによってファイルに追加されたものをすべて上書きします。ios:app
代わりに、プログラムがログ エントリを追加するたびにファイルの最後にジャンプします。