web-dev-qa-db-ja.com

C ++ファイル処理:ios :: appとios :: ateの違い?

ファイルに書き込むときのios::ateios:appの違いは何ですか?.
私の見解では、ios::appを使用するとファイル内を移動できますが、ios::ateを使用するとファイルの最後でのみ読み取り/書き込みができます。これは正しいです?

54
Adam_G

それは逆です。いつ ios::ateが設定されている場合、初期位置はファイルの終わりになりますが、その後は自由に検索できます。いつ ios::appが設定されている場合、all出力操作はファイルの最後で実行されます。すべての書き込みは暗黙的にシークが先行するため、他の場所に書き込む方法はありません。

65
Jon Purdy

それらは次のように指定されます(C++ 11の27.5.3.1.4で):

appは、各書き込みの前に終了しようとします

ateを開き、開いた直後に終了しよう

ios::appファイル内の書き込み位置は「スティッキー」です。すべての書き込みは、どこを探しても最後に行われます。

33
Steve Jessop

こちら で文書化されています。

ios::ate「オープン時にストリームの位置インジケータをストリームの最後に設定します。」

ios::app「各出力操作の前に、ストリームの位置インジケータをストリームの最後に設定します。」

これは、ios::ateは、ファイルを開いたときにファイルの末尾に位置を置きます。 ios::app代わりに、ストリームをフラッシュするたびにファイルの最後に配置します。たとえば、同じログファイルに書き込む2つのプログラムios::ateは、プログラムが開いてから他のプログラムによってファイルに追加されたものをすべて上書きします。 ios:appは、プログラムがログエントリを追加するたびに、ファイルの最後にジャンプします。

23
Haatschii

アプリ:

ポインタを移動することはできません。最後にのみ移動します

食べた:

レコードポインターを他の場所に移動できます

8
naveen

ios::ateオプションは入出力操作用で、ios::appを使用すると、ファイルの最後にデータを追加できます。