tstringlist を使用して非常に単純なログを作成します。私はそれをファイルに書きます:
pLog.SaveToFile(FileName);
どこかにバグがあり、コンピューターがシャットダウンしています。その後、ログ ファイルが見つかりません。おそらく、ファイルは非同期モードで保存されます。実行を続行する前に書き込みを待つ方法はありますか?
ありがとう、アルベルト
tstringlist を使用して非常に単純なログを作成します。私はそれをファイルに書きます:
pLog.SaveToFile(FileName);
どこかにバグがあり、コンピューターがシャットダウンしています。その後、ログ ファイルが見つかりません。おそらく、ファイルは非同期モードで保存されます。実行を続行する前に書き込みを待つ方法はありますか?
ありがとう、アルベルト
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;
TStringList.SaveToFile
同期して動作します。
この問題の最も明白な原因は次のとおりです。
TStringList.SaveToFile
。