![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как корректно закрыть файл лога? [D7, WinXP]
kyn66 © (2005-10-17 13:03:00)Здравствуйте мастера! Вопрос такой. В программе в начале некоторой опрерации для ведения лога я делаю следующее:
Var
RepOut : TextFile;
...
AssignFile(RepOut,'Info.log');
Rewrite(RepOut);
...
После окончания операции выполняю закрытие файла
...
CloseFile(RepOut);
...
А как мне поступить в ситуации, которая может возникнуть в тот момент, когда операция ешшо не закончилась,
а юзер нажал на кнопку закрытия формы (CloseQuery)
Как мне правильно отследить закрытие файла, чтобы все было корректно?
kyn66 (2005-10-17 18:34:00) [1]С чем Вас и поздравляю. Пока объяснял, уже сам придумал выход. Всем спасибо
Плохиш (2005-10-17 16:08:00) [2]
> Ну попробуйте сами...
Чего пробовать? У нас логи работают без проблем.
kyn66 (2005-10-17 15:21:00) [3]Да кокой к черту вирус. Ну попробуйте сами... уже устал объяснять. А поклавишно просто пример привел. Не буду-ж все структуру программы описывать. Конкретно, как проверить , не закрыт идентификатор файла?
Anatoly Podgoretsky (2005-10-17 14:53:00) [4]kyn66 © (17.10.05 13:59) [5]
Это надо делать атомарно, на каждую нажатую клавишу и это пахнет шпионом. Опять вирус пишем?
TUser (2005-10-17 14:38:00) [5]А все равно finally надо написать, чтобы гарантированно сохранить лог.
PS. Операцию, которую пользователь может прервать на половине - в отд. поток все-таки желательно.
Leonid Troyanovsky (2005-10-17 14:27:00) [6]
> TUser © (17.10.05 14:18) [7]
> В данном случае - операция, очевидно, в потоке, поэтому
Неочевидно.
Очевидно, что в "Начинающие".
--
Regards, LVT.
TUser (2005-10-17 14:18:00) [7]try ... finally
В данном случае - операция, очевидно, в потоке, поэтому
procedure TYourThread.Execute;
begin
assignfile
rewrite ()
try
while not Terminated do
DoWork
finally
ClesewFile()
end
end;
Digitman (2005-10-17 14:04:00) [8]
> Начинается блок...
какой такой "блок" ?
иллюстрируй свое понимание "блока" в коде/псевдокоде ..
иначе под "блоком" можно понимать все что угодно ...
kyn66 (2005-10-17 13:59:00) [9]Начинается блок...
С клавы ввожу число 1...
в лог файл пишу "Введено число 1"
С клавы ввожу число 2...
в лог файл пишу "Введено число 2"
С клавы ввожу число 3...
в лог файл пишу "Введено число 3" и т.д.
К примеру это мне нужно сделать до 10. А если юзеру надоело раньшее. Т.е. в конце этого блока ввода стоит CloseFile(Repout). Только после этого файл появится на диске. А если форма закрыта раньше этой процедуры закрытия файла?. Вот в чем вопрос. Я тут нашел нечто File mode/ Вот его как-то нужно прикрутить
Digitman (2005-10-17 13:21:00) [10]
> нечто записываю
то бишь вызываешь нечто вида Read[Block/Ln] ?
это - синхронные вызовы.
если они выполняются в осн.код.потоке, то юзер хоть обкликается на форме но прервать выполнение таких вызовов не сможет вплоть до их завершения (корректного или по исключению)
Anatoly Podgoretsky (2005-10-17 13:15:00) [11]kyn66 © (17.10.05 13:10) [2]
Давай подробнее, что же это такое, что не завершилось. TextFile только синхронные операции. Покажи нам свое чудо.
kyn66 (2005-10-17 13:10:00) [12]Да любая, нечто делаю, нечто записываю, короче некий процесс в некотором блоке.
Digitman (2005-10-17 13:06:00) [13]
> когда операция ешшо не закончилась
какая операция ?