Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1130232065
BaxTMaH
2005-10-25 13:21
2005.11.13
Объявление переменных


9-1119938373
4ECHOK
2005-06-28 09:59
2005.11.13
[RagDoll] Синтез движений персонажа


2-1129886781
syte_ser78
2005-10-21 13:26
2005.11.13
в чем разница?


2-1129564993
V0RoN
2005-10-17 20:03
2005.11.13
WinDir


14-1129729150
lightix
2005-10-19 17:39
2005.11.13
QuickReport у не нравится лазерный принтер samsung





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский