1

tstringlist を使用して非常に単純なログを作成します。私はそれをファイルに書きます:

pLog.SaveToFile(FileName);

どこかにバグがあり、コンピューターがシャットダウンしています。その後、ログ ファイルが見つかりません。おそらく、ファイルは非同期モードで保存されます。実行を続行する前に書き込みを待つ方法はありますか?

ありがとう、アルベルト

4

2 に答える 2

9

savetofile呼び出しがプログラムの最後にあり、プログラムが異常終了した場合、この呼び出しはおそらく実行されません。ログ呼び出しごとにログ ファイルを開き、ログ テキストと時刻を書き込み、ログ ファイルをフラッシュしてから閉じるログ メカニズムを使用します。このようにして、プログラムが異常終了した場合でも、ログ テキストがファイルに書き込まれることが保証されます。

コードは次のとおりです。

procedure TMainForm.Log (const s: string);
var
 f: textfile;

begin
 assignfile (f, logfilename);
 {$I-}  // yes, I know: modern programming style requires a try/except block
 append (f);
 if ioresult <> 0 then rewrite (f);
 {$I+}
 writeln (f, datetostr (now), ' ', timetostr (now), ' ', s);
 flush (f);
 closefile (f);
end;
于 2011-07-04T11:27:25.477 に答える
3

TStringList.SaveToFile同期して動作します。

この問題の最も明白な原因は次のとおりです。

  1. を呼び出していませんTStringList.SaveToFile
  2. ファイル名が無効です (パスが存在しない可能性があります)。
  3. ファイル名は、ユーザーが書き込みアクセス権を持っていないフォルダー (たとえば、プログラム ファイル フォルダー) にあります。
于 2011-07-04T10:56:53.013 に答える