Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.52 MB
Время: 0.038 c
6-1120546729
Интиресующийся
2005-07-05 10:58
2005.10.23
И снова TServerSocket!


2-1127664081
QwertyKz
2005-09-25 20:01
2005.10.23
Microsoft Jet


3-1126247046
kreyl
2005-09-09 10:24
2005.10.23
Как остановить выполнение длинного запроса?


14-1128012098
TG
2005-09-29 20:41
2005.10.23
Flash


2-1127480780
Mozart_mcs
2005-09-23 17:06
2005.10.23
Опять траблы с текстом





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский