質問
Suse 10.1 / g ++ 4.1.0で実行されている次のコードがありますが、ファイルに書き込みません。
#include <fstream>
#include <iostream>
int main(){
std::ofstream file("file.out");
file << "Hello world";
}
ファイルは正しく作成されて開きますが、空です。コードを変更した場合:
#include <fstream>
#include <iostream>
int main(){
std::ofstream file("file.out");
file << "Hello world\n";
}
(追加してください \n
テキストに)、それは機能します。また、ストリームを洗い流してみましたが、うまくいきませんでした。
助言がありますか?
解決
ファイルを確認している場合 cat
、誤って構成されているのはあなたのシェルである可能性があり、行の終わりがない場合、ラインを印刷しません。
std::endl
Aを追加します \n
と 流す。
他のヒント
Destructorは、ファイルをフラッシュして閉じる必要があります。
エラーも別の場所です。
1)適切な時点で確認しません。どの時点で、ファイルのコンテンツを「後」に比較しますか、それともプログラムが終了する前にブレークポイントを設定してからファイルコンテンツを確認しますか?
2)どういうわけか、プログラムが終了する前にクラッシュしますか?
これがあなたが試したものであるかどうかはわかりませんが、あなたはすべきです:
file << "Hello World" << std::flush;
アップデート; 有用なコメントのためにこの答えをここに残しています
フィードバックに基づいて、アドバイスを変更します。明示的に電話する必要はありません std::flush
(また file.close()
そのことについては)、デストラクタがあなたのためにそれをするからです。
さらに、フラッシュを呼び出すことは、最も最適化された方法ではないかもしれないI/O操作を明示的に強制します。基礎となるiOSTREAMとオペレーティングシステムを延期する方が良いでしょう。
明らかに、OPの問題は呼び出しまたは電話と関係がありませんでした std::flush
, 、そしておそらく、ファイルストリームデストラクタが呼び出される前にファイルを読み込もうとしたためでした。
します
file << "Hello world" << std::endl;
仕事?
EndlはNewlineを挿入し、バッファをフラッシュします。あなたがすでにそれを洗い流しようとしたと言ったとき、それはあなたが言及していたことですか?
POSIXに準拠したシステムであるLinuxに取り組んでいます。 POSIX標準 何を定義します ライン は:
ゼロ以上の非ニューライン文字のシーケンスと終了した新しいライン文字。
したがって、Newline文字がなければ、ファイルには0行が含まれているため、空です。