0

私のプログラムはあらゆる種類のログ情報をテキスト ファイルに保存します。ただし、メモリ アクセス違反などの問題が原因でプログラムがクラッシュしている場合、ログ テキスト ファイルには何も記録されません。

プログラムが開いているログ テキスト ファイルを閉じられなかったことが原因だと思います。

現在、ログ テキスト ファイルの保存にFILE *を使用しています。おそらく、各ログを書き込むたびに開いたり閉じたりできますが、それはオーバーヘッドが大きすぎると思います。

プログラムのクラッシュや予期しない停止に関係なく、ログを保持できる他の方法はありますか?

プログラムがクラッシュする直前にログを確認したい。

プログラムに C++/CLI を使用しています。事前にどうもありがとうございました。

    FILE* logfile;        
    errno_t err;
    char LogFileNameBuf[512] = {0,};
    sprintf_s(LogFileNameBuf, "LogFile.txt");
    err = fopen_s(&logfile, LogFileNameBuf, "wt");

    if(logfile != NULL)
    {
        bLogfile = true;
        GetLocalTime(&st);
        sprintf_s(logBuf, "[%04d-%02d-%02d][%02d:%02d:%02d] SUCCESS:: Log Started\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
        fputs(logBuf, logfile); 
    }

    // close log file
    if(bLogfile == true) 
    {
        GetLocalTime(&st);
        sprintf_s(logBuf, "[%04d-%02d-%02d][%02d:%02d:%02d] SUCCESS:: Log File Closed\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
        fputs(logBuf, logfile);
        fclose(logfile);
    }
4

1 に答える 1

1

を使用して、ファイルで I/O 操作を強制することができますfflush()。ログに書き込むたびに、実際にできるだけ多くのデータが書き込まれるようにすることができます。

あなたがC ++を使用しているので、fstream代わりに使用することをお勧めしますがFILE*

于 2013-05-22T14:26:23.947 に答える