![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как WinRAR определяет что файл, открытый из архива был закрыт? [D7, WinXP]
Angel[Saint] © (2005-09-30 14:43:00)Вопрос такой: как отловить момент закрытия файл? т.е. например в винраре открываешь прям из архива файл для просмотра/редактирования и после его закрытия винрар спрашивает - файл изменился, упаковать его заново?
хочу сделать в программе такую же фичу, но как??? нигде не нашел толковой информации. вот здесь http://www.delphimaster.ru/cgi-bin/forum.pl?id=1127290638&n=5есть процедура определяющая открыт файл или нет, НО!!! она не работает для TXT, JPG файлов и некоторых других. а TXT файлы у меня будут использоваться. помогите плиз... если есть ссылки на нужную информацию, то буду оч. признателен.
Angel[Saint] (2005-10-03 13:07:00) [1]Defunct © (03.10.05 10:48) [15]
можно нажать Ctrl+S и дата изменения файла будет другой, хотя файл не закрыт....
видимо придеться отлавливать закрытие редактора...
спасибо за помощь
Defunct (2005-10-03 10:48:00) [2]Angel[Saint] (03.10.05 07:44) [13]
Периодически проверять дату изменения файла.
umbra (2005-10-03 10:47:00) [3]тут, похоже все зависит от редактора. Если редактор файл лочит или отображает в память, то определить можно. Например, если я открываю текстовый файл шестнадцатиричным редактором WinHex, то удалить файл нельзя и способ из http://www.delphimaster.ru/cgi-bin/forum.pl?id=1127290638&n=5сработает. Но если пользоваться блокнотом, то проблем с удалением не возникнет. так что, в общем для Win98, задача, похоже не решается
Angel[Saint] (2005-10-03 07:44:00) [4]мда.. есть такая коляска... такой вариант не подходит. есть еще способы узнать когда закрывается ФАЙЛ?
umbra (2005-09-30 21:08:00) [5]2 Angel[Saint]
Винрар все не проверяет, закрыт ли файл, он смотрит, закрыт ли редактор. табличка с вопросм о переупаковке появляется только если закрыть редактор. Если закрыть файл, а редактор оставить, то таблички не будет.
Angel[Saint] (2005-09-30 19:53:00) [6]
> Fay © (30.09.05 17:37) [9]
> 2 Angel[Saint] (30.09.05 17:26) [8]
>
> 1) WinRar попытается удалить файл после закрытия проги.
Если открыть вордовский файл, то с ним ничего нельзя сделать (ни удалить, ни переименовать), но если открыть текстовый файл (например блокнотом), то его можно даже удалить.... система ничего не скажет....
Fay (2005-09-30 17:38:00) [7]Angel[Saint] (30.09.05 17:26) [8]
Parameters
lpExecInfo
Addressof a SHELLEXECUTEINFO structure that contains and receives information about the application being executed.
Fay (2005-09-30 17:37:00) [8]2 Angel[Saint] (30.09.05 17:26) [8]
1) WinRar попытаетсяудалить файл после закрытия проги.
2) без var передаётся указатель.
Angel[Saint] (2005-09-30 17:26:00) [9]han_malign © (30.09.05 16:56) [7]
1. Опять же это будет ссылка на программу, а не на файл. Но ведь можно не закрывая программу закрыть файл и открыть другой.
2. Запись передается без VAR параметра. Разве функция сможет ее изменить?
han_malign (2005-09-30 16:56:00) [10]
> какой еще hProcess?
- а описаниеlpExecInfo: PShellExecuteInfoA- посмотреть не судьба?
Angel[Saint] (2005-09-30 16:54:00) [11]umbra © (30.09.05 16:26) [3]
Именно так
umbra © (30.09.05 16:29) [5]
Я открываю файл с помощью ShellExecute, она автоматически запускает ЕХЕ-шник, связанный с данным типом файла. А т.к. с типом файла, который я открываю может быть не связано ни одного приложения, то я не знаю заранее какой ЕХЕ-шник запускать.
han_malign © (30.09.05 16:28) [4]
>>ShellExecuteEx - возвращает hProcess, далее по аналогии с CreateProcess...
ShellExecuteEx(lpExecInfo: PShellExecuteInfoA): LongBool;
какой еще hProcess?
umbra (2005-09-30 16:29:00) [12]
> это для ЕХЕ файлов.
так ведь открыть текстовый файл или картинку может только ЕХЕ файл. В посте > TUser ©написан вполне приемлемый рецепт. Ведь именно в Вашей программе создается процесс, открывающий файл, и, значит, именно Вы решаете, какой программой его (файл) открыть
han_malign (2005-09-30 16:28:00) [13]ShellExecute Ex- возвращает hProcess, далее по аналогии с CreateProcess...
umbra (2005-09-30 16:26:00) [14]
> она не работает для TXT, JPG файлов и некоторых других
то есть как не работает? код из указанной ветки выполняется на открытом файле и выдает false?
Angel[Saint] (2005-09-30 15:11:00) [15]это для ЕХЕ файлов. вот пример. запускаю с помощью ShellExecute файл с именем 123.bbft это обычный текстовый файл. в системе никаких привязок нет, т.е. система не знает чем открыват этот файл. следовательно я не могу заранее знать какую прогу юзер будет использовать для открытия этого файла, НО! мне нужно узнать когда пользователь завершит с ним работу и предложить сохранить измененный файл. так что данный вариант не подходит. или я чего-то не понимаю?
TUser (2005-09-30 14:44:00) [16]CreateProcess + WaitForSingleObject