Delphi Tstringlist, запись файла синхронизации - PullRequest
1 голос
/ 04 июля 2011

Я делаю очень простой журнал с tstringlist. Я пишу это в файл:

pLog.SaveToFile(FileName);

Где-то есть ошибка, и мой компьютер выключен. После этого я не могу найти свой лог-файл. Вероятно, файл сохранен в режиме asych. Есть ли способ ожидания записи, прежде чем продолжить выполнение?

Спасибо, Alberto

Ответы [ 2 ]

9 голосов
/ 04 июля 2011

Если вызов 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;
3 голосов
/ 04 июля 2011

TStringList.SaveToFile работает синхронно.

Наиболее очевидные причины проблемы:

  1. Вы не звоните TStringList.SaveToFile.
  2. Имя файланеверен (возможно, путь не существует).
  3. Имя файла находится в папке, к которой у пользователя нет прав записи (например, папка с файлами программы).
...