2012-03-09 12 views
2

を閉じるまで、出力をファイルにしません(私はofstreamのを閉じると同様に機能することを前提と)私はアプリを閉じるまで、残念ながらC++ - ofstreamのは、私は次のコード持っている私はプログラム

ofstream mOutFile.open(logPath, ios_base::app); 
    string lBuilder; 

    lBuilder.append("========================================================\n"); 
    lBuilder.append("Date: "); 
    lBuilder.append(asctime(timeinfo)); 
    lBuilder.append("\n"); 
    lBuilder.append("Log Message:\n"); 
    lBuilder.append(toLog); 
    lBuilder.append("\n"); 
    lBuilder.append("========================================================\n\n"); 

    int lSize = lBuilder.size(); 
    char* lBuffer = new char[lSize]; 
    int index = 0; 
    for each (char c in lBuilder) 
     lBuffer[index++] = c; 

    mOutFile.write(lBuffer, lSize); 
    mOutFile.flush(); 

を出力はテキストファイルに書き込まれません。私はおそらくストリームを閉じて再オープンすることができ、すべてが「うまくいく」ことを知っていますが、それは愚かで間違った解決策のようです。私はここで間違って何をしていますか?

また、私はここに発見した他の質問に基づいて、以下のバリエーションを試してみましたが、これらのソリューションは、動作しませんでした。この上の任意の助けを事前に

mOutputFile << flush; 
mOutputFile << endl; 

感謝を。

編集このコードのすべては、Visual C++で動作していますが、フラッシュを強制しても、ストリームが閉じられるまでファイルが書き込まれない点を除いて、うまく動作します。また、私は< <演算子をchar *と.write()に変更して、動作が異なるかどうかを調べました。

+2

なぜ構文の種類が「それぞれ(charC in lBuilder)」です。それは有効なC++ではありません。 –

+0

<<を使用して文字列をファイルに書き込んでいない理由はありますか? – ebutusov

+0

'for each'はC#ismのようです。 また、ファイルハンドルをフラッシュした後にファイルハンドルを閉じて、それが役立つかどうか確認してください。 –

答えて

1

です書き込み動作の後である。

mOutputFile << "all of my text" << endl; 
mOutputFile.close(); 
mOutputFile.open(mLogPath); 

EDITいくつかの他のシステムでフラッシュを強制的に実行しようとした後、それはちょうど私の開発マシン上で正しく実行されていない何かのように見えます。良いニュースではありませんが、少なくとも上記の解決策はofstreamをプログラムでフラッシングするときに失敗するようです。しかし、私は上記のコードの意味がわからないので、誰かがこのようなストリームを閉じて再オープンすることの意義がある場合は、チャイムしたいと思う。

+0

あなたのコンピュータに何か問題があります – 111111

+0

このように見えますが、フラッシュは他のシステムで正常に動作します –

+0

は、別のプロセスなどで開かれているファイルです(* NIX環境ではlsofを使用できます) 。 – 111111

7
std::ofstream file(logPath, ios_base::app); 

file << "========================================================\n" 
    << "Date: " << asctime(timeinfo) 
    << "\nLog Message:\n" << toLog 
    << "\n========================================================\n\n" 
    << std::flush; 
    //if you want to force it write to the file it will also flush when the the file object is destroyed 
//file will close itself 

私はストリームを閉じて再度開くことで、「それがうまく作る」だけで終わったこれだけではなく読みやすいですが、それはおそらく、あなたの方法よりも高速になります+それは、より標準的なappraoch

+0

私は明日のオフィスです –

+1

これはうまくいきませんでした。私はちょうど "うまくいく"ことに決めました。私は数分で解決策を投稿します。 –

関連する問題