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

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

Как 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


Наверх

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