12

次のコードを 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(テキストに a を追加)、機能します。オフストリームのフラッシュも試みましたが、うまくいきませんでした。

助言がありますか?

4

5 に答える 5

10

を実行してファイルを確認するcatと、シェルが正しく構成されておらず、行末がない場合に行が出力されない可能性があります。aとフラッシュ
std::endlを追加します。\n

于 2010-06-24T19:27:27.717 に答える
5

デストラクタは、ファイルをフラッシュして閉じる必要があります。

私はかなり確信しています、エラーは別の場所です

1) 適切な時点でチェックしていない。終了の「後」のどの時点でファイルの内容を比較しますか、それともプログラムが終了する前にブレークポイントを設定してからファイルの内容を確認しますか?

2) どういうわけかプログラムが終了する前にクラッシュしますか?

于 2010-06-24T19:55:33.260 に答える
5

これがあなたが試したものかどうかはわかりませんが、次のことを行う必要があります。

file << "Hello World" << std::flush;

更新; 有用なコメントがあるため、この回答をここに残します

フィードバックに基づいて、アドバイスを修正します。明示的に呼び出す必要はありませんstd::flush(さらに言えfile.close()ば)。デストラクタが呼び出しを行うためです。

さらに、フラッシュを明示的に呼び出すと、最適化されていない可能性のある I/O 操作が強制されます。基礎となる iostreams とオペレーティング システムに委ねる方がよいでしょう。

明らかに、OPの問題は の呼び出しまたは呼び出しに関連しておらずstd::flush、おそらくファイルストリームデストラクタが呼び出される前にファイルを読み取ろうとしたことが原因でした。

于 2010-06-24T19:24:25.180 に答える
0

する

file << "Hello world" << std::endl;

仕事?

endl は改行を挿入し、バッファをフラッシュします。それは、あなたがすでにそれを洗い流そうとしたと言ったときに言及していたことですか?

于 2010-06-24T19:24:01.657 に答える