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