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