Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

Как корректно закрыть файл лога?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.041 c
11-1110981835
Vladimyr
2005-03-16 17:03
2005.11.13
QueryEndSession - как чуток подождать?..


14-1130135274
vok
2005-10-24 10:27
2005.11.13
Пропал ребенок!


4-1126532696
vishnia
2005-09-12 17:44
2005.11.13
Переключение языков


10-1107512444
sapsi
2005-02-04 13:20
2005.11.13
Поиск-замена в Word средствами делфи


6-1122448409
ZSergey
2005-07-27 11:13
2005.11.13
ServerSocket и ClientSocket