Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > ShellExecute открыть файл в режиме чтения


Автор: kaprizulina 30.3.2010, 10:38
Добрый день, подскажите, пожалуйста, как открыть любой файл в родной программе в режиме для чтения. Может проще будет CreateProcess? Мне бы примерчик хотя бы...
Спасибо.

Автор: Snowy 30.3.2010, 10:58
Вообще-то программа сама решает, как ей открывать файл.
И повлиять на это никк нельзя - открытие файла в коде программы.

Автор: kaprizulina 30.3.2010, 11:15
Спасибо за ответ. 
Т.е открытие файла любого приложения через делфи стандартной процедурой невозможна?((
Есть какой-нить способ это сделать, если заранее неизвестно какие файлы будут открываться? 

Автор: Snowy 30.3.2010, 11:25
Мы не можем открыть файл приложением.
Мы всего лишь вызываем ассоциированное приложение и сообщаем ему имя файла.
А что это приложение с этим именем будет делать - это его личное дело.

Цитата(kaprizulina @  30.3.2010,  11:15 Найти цитируемый пост)
открытие файла любого приложения через делфи стандартной процедурой невозможна?((
Что есть стандартная процедура?


Цитата(kaprizulina @  30.3.2010,  11:15 Найти цитируемый пост)
Есть какой-нить способ это сделать, если заранее неизвестно какие файлы будут открываться? 
Сделать что?

Автор: kaprizulina 30.3.2010, 11:37
Цитата(Snowy @ 30.3.2010,  11:25)
Сделать что?

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

Я имею в виду, что если какая-нибудь функция, которая выполняет вышесказанные действия в какой-нибудь библиотеке делфи или такую функцию нужно написать рукчкаме или вообще нельзя в таком режиме и таким способом открыть файл. 
Спасибо.

Автор: CodeMonkey 30.3.2010, 13:19
Ну, вы можете заблокировать запись в файл. Тогда приложение при всём желании не сможет его изменить - я думаю, вам это и нужно, когда вы говорите "открыть в режиме чтения".

Это можно сделать:
1). Установим атрибут "read only". Очень просто и документировано. Проблема в том, что некоторые очень кривые хитрые приложения могут сбросить атрибут до записи и установить после.
2). Открыть файл в режиме "deny write". Более надёжно и тоже относительно просто. Проблема в том, что некоторые кривые приложения могут не открыть файл, потому что открывают его на запись.
3). Установить запрет изменения ACL списком. Не просто, но зато самый надёжный и правильный способ. К сожалению, будет работать только в ОС семейства NT и только на NTFS (ну, может и других системах тоже, но точно не на FAT).

Добавлено через 10 минут и 40 секунд
А вообще, существует несколько "действий" (verbs), которые можно выполнять с файлом. open - это открытие файла. Есть ещё view - просмотр файла. Я так понимаю, что это и есть ваше желаемое "открыть в режиме чтения".

Проблема в том, что open на файл регистрируют почти все. А view - только немногие грамотно написанные проги.

Автор: Snowy 30.3.2010, 13:31
Если мы заблокируем файл, то программа, пытаясь получить желаемый ею доступ просто не сможет этот файл открыть.
И не откроет...

Автор: CodeMonkey 30.3.2010, 15:29
Цитата(Snowy @  30.3.2010,  13:31 Найти цитируемый пост)
Если мы заблокируем файл, то программа, пытаясь получить желаемый ею доступ просто не сможет этот файл открыть.

Верно, но только кривые программы. Почему кривые? Потому что тогда они не смогут открыть файл на CD-болванке.

Автор: kaprizulina 30.3.2010, 15:39
всем спасибо)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)