Форум: "Основная";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];
ВнизКак 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;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.039 c