Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Открытие файла в Делфи

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Открытие файла в Делфи
Имя
Сообщение << Старые топики   Новые топики >>
Открытие файла в Делфи - 2008-01-05 20:16:56.460000   
Login_hochu

Сообщений: 1471
Оценки: 0
Присоединился: 2007-07-15 14:19:23.423333
Как в делфи открыть файл тем приложением, которое сопоставлено этому файлу в виндовс, например мне надо из программы открыть файл d:\document.doc - он должен открыться вордом? Можно ли это сделать, если абсолютный путь неизвестен , а файл лежит в одной папке с программой?
 
 
Post #: 1
RE: Открытие файла в Делфи - 2008-01-05 20:38:02.016666   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
Вроде бы можно. Delphi всемогуще! Функция GetCurrentDirectory даст путь папки с прогой. После чего есть 2 WinApi функции ShellExecute и WinExec. 2-я проще,как пользоваться ими написано где-то рядом в топиках(или в хелпе/инете и т.д.)
Post #: 2
RE: Открытие файла в Делфи - 2008-01-05 20:49:22.316666   
Login_hochu

Сообщений: 1471
Оценки: 0
Присоединился: 2007-07-15 14:19:23.423333
С WinExec  вроде разобрался - только почемуто не срабатывают пути вида
%SystemRoot%\system32\mspaint.exe  , а если написать C:\windows\system32\mspaint.exe - тогда работает.
 
Post #: 3
RE: Открытие файла в Делфи - 2008-01-05 21:28:39.380000   
blаcksun

Сообщений: 1670
Оценки: 0
Присоединился: 2007-11-19 20:03:45.703333

quote:

ORIGINAL: Login_hochu

С WinExec  вроде разобрался - только почемуто не срабатывают пути вида
%SystemRoot%\system32\mspaint.exe  , а если написать C:\windows\system32\mspaint.exe - тогда работает.


function _GetTempPath: String; var Buffer: array[0..1023] of Char; begin SetString(Result, Buffer, GetTempPath(Sizeof(Buffer) - 1, Buffer)); end; function GetSysDir: String; var Temp: array[0..255] of Char; begin GetSystemDirectory(Temp, 256); Result := StrPas(Temp); end; function GetWinDir: string; var Temp: array[0..255] of Char; begin GetWindowsDirectory(Temp, 256); Result := StrPas(Temp); end;
Post #: 4
RE: Открытие файла в Делфи - 2008-01-05 21:52:47.903333   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

ORIGINAL: Login_hochu
С WinExec вроде разобрался - только почемуто не срабатывают пути вида
%SystemRoot%\system32\mspaint.exe , а если написать C:\windows\system32\mspaint.exe - тогда работает.

эээх. потому что систему надо изучать с основных принципов, а не с win32api. %SystemRoot% никакого отношения к файловой системе не имеет, это переменная окружения. Не скажу как это в точности реализовано в венде – не знаю, но если переменные окружения в венде – это действительно переменные окружения, то надо искать в win32api, что-то в стиле getenv из stdlib.h, если нет то есть другой способ: искать в win32api функции со слово shell и высматривать среди них те, которые раскрывают эти самые переменные окружения, что-нибудь в стиле ShellExpand или может подлиннее ShellExpandEnviron…
Кстати ShellExecute, насколько я понимаю название, должна бы раскрывать все переменные окружения, и понимать пути вида ./some-file.exe, или ../some-dir/some-file.exe, или просто some-file.exe. Хотя странно что у тебя возникли проблемы с файлами в текущей директории – стандартом даже для доса было искать файлы с неполными путями начиная с текущей директории процесса, а уж директории . и .. присутствуют по-моему в любой файловой системе. Или ms забила на эти традиции?
Post #: 5
RE: Открытие файла в Делфи - 2008-01-05 22:22:07.553333   
Login_hochu

Сообщений: 1471
Оценки: 0
Присоединился: 2007-07-15 14:19:23.423333
Точно ! Я не додумался [sm=an.gif] В текущей директории файл запускается сразу ! 
ЗЫ я только вчера делфи скачал.
Post #: 6
RE: Открытие файла в Делфи - 2008-01-06 00:19:09.473333   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
quote:

ORIGINAL: Genco

Вроде бы можно. Delphi всемогуще! Функция GetCurrentDirectory даст путь папки&nbsp;с прогой. После чего есть 2 WinApi функции ShellExecute и WinExec. 2-я проще,как пользоваться ими написано где-то рядом&nbsp;в топиках(или в хелпе/инете и т.д.)

Насколько я помню, GetCurrentDirectory отдает текущую дирректорию для текущего процесса.
Это не совсем то же самое, что дирректория с прогой.
поясню.
Суем в прогу диалог открытия файла и открываем чего-нить.
Все. Дирректория с прогой - не текущая.
Поэтому из текущей дирректории в ShellExecute лучше пихать имя файла с путем.
ExtractFileDir(Application.ExeName)+'\<имя файла>'
Post #: 7
RE: Открытие файла в Делфи - 2008-01-06 00:41:09.530000   
blаcksun

Сообщений: 1670
Оценки: 0
Присоединился: 2007-11-19 20:03:45.703333

quote:

ORIGINAL: alexbozhko

quote:

ORIGINAL: Genco

Вроде бы можно. Delphi всемогуще! Функция GetCurrentDirectory даст путь папки с прогой. После чего есть 2 WinApi функции ShellExecute и WinExec. 2-я проще,как пользоваться ими написано где-то рядом в топиках(или в хелпе/инете и т.д.)

Насколько я помню, GetCurrentDirectory отдает текущую дирректорию для текущего процесса.
Это не совсем то же самое, что дирректория с прогой.
поясню.
Суем в прогу диалог открытия файла и открываем чего-нить.
Все. Дирректория с прогой - не текущая.
Поэтому из текущей дирректории в ShellExecute лучше пихать имя файла с путем.
ExtractFileDir(Application.ExeName)+'\&lt;имя файла&gt;'

А если прога без компонентов и формы?))

function ExtractFilePath(const FileName: String): String; var i: Integer; begin for i := Length(FileName) downto 0 do if FileName[i] = '\' then begin Result := Copy(FileName, 0, i - 1); exit; end; end; ..... ExtractFilePath(ParamStr(0))+'\&lt;имя файла&gt;' Так думаю лудше
Post #: 8
RE: Открытие файла в Делфи - 2008-01-06 01:08:22.073333   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
quote:

ORIGINAL: blаcksun

quote:

ORIGINAL: alexbozhko

quote:

ORIGINAL: Genco

Вроде бы можно. Delphi всемогуще! Функция GetCurrentDirectory даст путь папки&nbsp;с прогой. После чего есть 2 WinApi функции ShellExecute и WinExec. 2-я проще,как пользоваться ими написано где-то рядом&nbsp;в топиках(или в хелпе/инете и т.д.)

Насколько я помню, GetCurrentDirectory отдает текущую дирректорию для текущего процесса.
Это не совсем то же самое, что дирректория с прогой.
поясню.
Суем в прогу диалог открытия файла и открываем чего-нить.
Все. Дирректория с прогой - не текущая.
Поэтому из текущей дирректории в ShellExecute лучше пихать имя файла с путем.
ExtractFileDir(Application.ExeName)+'\&lt;имя файла&gt;'

А если прога без компонентов и формы?))

function ExtractFilePath(const FileName: String): String; var i: Integer; begin for i := Length(FileName) downto 0 do if FileName[i] = '\' then begin Result := Copy(FileName, 0, i - 1); exit; end; end; ..... ExtractFilePath(ParamStr(0))+'\&lt;имя файла&gt;' Так думаю лудше

А при чем тут это?
ExtractFilePath - замена ExtractFileDir

Функция ExtractFileDir прописана в SysUtils. Компоненты и формы тут не причем…

Если прога без компонентов и формы, то объект Application не создастся.
Через ParamStr его просто искать надо будет.


Post #: 9
RE: Открытие файла в Делфи - 2008-01-06 01:14:52.496666   
blаcksun

Сообщений: 1670
Оценки: 0
Присоединился: 2007-11-19 20:03:45.703333
quote:

Функция ExtractFileDir прописана в SysUtils.

Не, а вдруг ТС надо чтоб вес был небольшим? SysUtils прилично в весе добавляет
Post #: 10
RE: Открытие файла в Делфи - 2008-01-06 01:22:45.920000   
alexbozhko

Сообщений: 1024
Оценки: 0
Присоединился: 2005-11-24 13:35:34
quote:

ORIGINAL: blаcksun

quote:

Функция ExtractFileDir прописана в SysUtils.

Не, а вдруг ТС надо чтоб вес был небольшим? SysUtils прилично в весе добавляет

А я тогда просто срезаю из этого модуля нужную функцию :)
То на то и выходит
Но так лучше делать, чем писать свои. Рефакторинг кода потом проще делать :)
Post #: 11
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Открытие файла в Делфи







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.