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

Вниз

Как WinRAR определяет что файл, открытый из архива был закрыт?   Найти похожие ветки 

 
Angel[Saint]   (2005-09-30 14:43) [0]

Вопрос такой: как отловить момент закрытия файл? т.е. например в винраре открываешь прям из архива файл для просмотра/редактирования и после его закрытия винрар спрашивает - файл изменился, упаковать его заново?
хочу сделать в программе такую же фичу, но как??? нигде не нашел толковой информации. вот здесь http://delphimaster.net/view/4-1127290638/ есть процедура определяющая открыт файл или нет, НО!!! она не работает для TXT, JPG файлов и некоторых других. а TXT файлы у меня будут использоваться. помогите плиз... если есть ссылки на нужную информацию, то буду оч. признателен.


 
TUser ©   (2005-09-30 14:44) [1]

CreateProcess + WaitForSingleObject


 
Angel[Saint]   (2005-09-30 15:11) [2]

это для ЕХЕ файлов. вот пример. запускаю с помощью ShellExecute файл с именем 123.bbft это обычный текстовый файл. в системе никаких привязок нет, т.е. система не знает чем открыват этот файл. следовательно я не могу заранее знать какую прогу юзер будет использовать для открытия этого файла, НО! мне нужно узнать когда пользователь завершит с ним работу и предложить сохранить измененный файл. так что данный вариант не подходит. или я чего-то не понимаю?


 
umbra ©   (2005-09-30 16:26) [3]


> она не работает для TXT, JPG файлов и некоторых других


то есть как не работает? код из указанной ветки выполняется на открытом файле и выдает false?


 
han_malign ©   (2005-09-30 16:28) [4]

ShellExecuteEx - возвращает hProcess, далее по аналогии с CreateProcess...


 
umbra ©   (2005-09-30 16:29) [5]


> это для ЕХЕ файлов.


так ведь открыть текстовый файл или картинку может только ЕХЕ файл. В посте> TUser © написан вполне приемлемый рецепт. Ведь именно в Вашей программе создается процесс, открывающий файл, и, значит, именно Вы решаете, какой программой его (файл) открыть


 
Angel[Saint]   (2005-09-30 16:54) [6]

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?


 
han_malign ©   (2005-09-30 16:56) [7]


> какой еще hProcess?

- а описание lpExecInfo: PShellExecuteInfoA - посмотреть не судьба?


 
Angel[Saint]   (2005-09-30 17:26) [8]

han_malign ©   (30.09.05 16:56) [7]

1. Опять же это будет ссылка на программу, а не на файл. Но ведь можно не закрывая программу закрыть файл и открыть другой.
2. Запись передается без VAR параметра. Разве функция сможет ее изменить?


 
Fay ©   (2005-09-30 17:37) [9]

2 Angel[Saint]   (30.09.05 17:26) [8]

1) WinRar попытается удалить файл после закрытия проги.
2) без var передаётся указатель.


 
Fay ©   (2005-09-30 17:38) [10]

Angel[Saint]   (30.09.05 17:26) [8]

Parameters

lpExecInfo
Address of a SHELLEXECUTEINFO structure that contains and receives information about the application being executed.


 
Angel[Saint]   (2005-09-30 19:53) [11]


> Fay ©   (30.09.05 17:37) [9]
> 2 Angel[Saint]   (30.09.05 17:26) [8]
>
> 1) WinRar попытается удалить файл после закрытия проги.


Если открыть вордовский файл, то с ним ничего нельзя сделать (ни удалить, ни переименовать), но если открыть текстовый файл (например блокнотом), то его можно даже удалить.... система ничего не скажет....


 
umbra ©   (2005-09-30 21:08) [12]

2 Angel[Saint]

Винрар все не проверяет, закрыт ли файл, он смотрит, закрыт ли редактор.  табличка с вопросм о переупаковке появляется только если закрыть редактор. Если закрыть файл, а редактор оставить, то таблички не будет.


 
Angel[Saint]   (2005-10-03 07:44) [13]

мда.. есть такая коляска... такой вариант не подходит. есть еще способы узнать когда закрывается ФАЙЛ?


 
umbra ©   (2005-10-03 10:47) [14]

тут, похоже все зависит от редактора. Если редактор файл лочит или отображает в память, то определить можно. Например, если я открываю текстовый файл шестнадцатиричным редактором WinHex, то удалить файл нельзя и способ из http://delphimaster.net/view/4-1127290638/ сработает. Но если пользоваться блокнотом, то проблем с удалением не возникнет. так что, в общем для Win98, задача, похоже не решается


 
Defunct ©   (2005-10-03 10:48) [15]

Angel[Saint]   (03.10.05 07:44) [13]

Периодически проверять дату изменения файла.


 
Angel[Saint]   (2005-10-03 13:07) [16]

Defunct ©   (03.10.05 10:48) [15]
можно нажать Ctrl+S и дата изменения файла будет другой, хотя файл не закрыт....

видимо придеться отлавливать закрытие редактора...
спасибо за помощь



Страницы: 1 вся ветка

Текущий архив: 2005.10.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.035 c
14-1127981297
Андрей Жук
2005-09-29 12:08
2005.10.23
Андрею Шевченко - 29!


1-1128341913
saNat
2005-10-03 16:18
2005.10.23
Не срабатывает ModalResult


3-1126533847
Андрей Жук
2005-09-12 18:04
2005.10.23
Нужна критика :) - репликации в FB


3-1126155558
Ol
2005-09-08 08:59
2005.10.23
MSSQL+ADO+TQuery+TDBEdit


14-1128000998
imbalancewc3
2005-09-29 17:36
2005.10.23
Помогите узнать название песни