Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как корректно закрыть файл лога? [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]


> когда операция ешшо не закончилась


какая операция ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо