![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить путь к файлу? [D7, XP]
Сергей © (2008-09-19 20:02:00)Народ подскажите пожалуйста как узнать путь к файлу начиная с той папки, где находиться програма, а не с буквы диска и тд :
Например програма находиться в:
D:\MyApp\MyApp.exe
в папке D:\MyApp есть папка \Files\Image.bmp
Как получить путь "\Files\Image.bmp"
а не "D:\MyApp\Files\Image.bmp"
???????
KilkennyCat (2008-09-20 00:26:00) [21]
if opendialog1.execute then begin
ТоЧтоНадо := Delete(opendialog1.filename,1,Length(ExtractFileDir(Application.ExeName));
...
end;
Сергей (2008-09-20 00:14:00) [22]Нет не подходит. Попробую еще раз обьяснить. Ситуация такая: В TLIstView загружается список файлов. По двойному клику вибраний в TLIstView -е файл запускаеться с помощю программы, путь к которой я должен заранее выбрать с помощю OpenDialog. Я открываю диалог открытия файлов (OpenDialog) и выбираю программу с которой я буду запускать выбраные в TLIstView -е файлы. Путь к этой програме я сначала хочу отобразить в TEdit , а потом записать в INI :
[Settings]
EXE=Emulator\ROM\gens.exe
Моя програма находиться в -> D:\Delphi\Project1\MyApp
Та програма, с которой должны открываться выбраные файлы находиться в - > D:\Delphi\Project1\MyApp\Emulator\ROM\gens.exe при чем папка "ROM" может иметь любое имя, но папка "Emulator" не меняеться. Для того я и использую OpenDialog, чтоб при желании можно было выбрать другую програму для открытия файлов, и прописать путь в INI, только путь должен начинаться от паки Emulator\ + имя подпапки в которой находиться програма gens.exe.
вот часть кода
var
Exe : PAnsiChar;
S3 : string;
Settings : TIniFile;
begin
Settings := TIniFile.Create('Settings.ini');
S3 := Settings.ReadString('Settings','EXE','');
Exe := PAnsiChar (S3);
ShellExecute(Handle,'open', EXE,File, nil, SW_SHOWNORMAL) ;
Таким образом по двойному клику програма считует Settings.ini узнает путь (Emulator\ROM\gens.exe) и запускает File (имя файла из TLIstView, ето все работает)
Я не могу сделать так, чтоб при виборе екзешника gens.exe у меня в INI прописывалось "Emulator\ROM\gens.exe" вместо D:\Delphi\Project1\MyApp\Emulator\ROM\gens.exe
Если я перенесу програму с D:\Delphi\Project1\MyApp\ в C:\MyApp а в INI Будет такое:
[Settings]
EXE=D:\Delphi\Project1\MyApp\Emulator\ROM\gens.exe
То gens.exe не запуститься так как он будет уже на другом диске.
Мне надо задать путь к gens.exe начиная с места нахождения моей програмы. т.е. корневой папкой должна считаться та папка где находиться моя програма + дальнейший путь к gens.exe.
Если использовать Edit1.Text := ExtractFilePath (OpenDialog.FileName); то я только получаю полный путь к gens.exe
Надеюсь я правильно обяснил :)
{RASkov} (2008-09-19 22:49:00) [23]
const
DIR_FILES = 'Files';
........
var S: String;
..........
S:=IncludeTrailingPathDelimiter(DIR_FILES)+ExtractFileName(OpenDialog.FileName);
{RASkov} (2008-09-19 22:43:00) [24]См ExtractFileXxxxx - тут(в Ххххх) тебе и имя и путь и чего хочешь.... а уж как все это скомпоновать, думаю сообразишь или ты дворник?
KilkennyCat (2008-09-19 22:34:00) [25]мда...
что такое OpenDialog.FileName?
сам отвечу:
например, это S - Строка содержащая D:\MyApp\Files\Image.bmpиз ответа выше. И чем же не подходит-то?
Renegat (2008-09-19 22:34:00) [26].\Files\Image.bmp
Сергей (2008-09-19 22:27:00) [27]Неа не подходит. Коротше. Мне нада используя OpenDialog выбрать файл и путь к этому файлу вивести в TEdit я написал так:
Edit1.Text := OpenDialog.FileName;
в резальтате у меня в TEdit написано: D:\Delphi\MyApp\Files\Image.bmp (image.bmp - тот файл который я выбираю)
А мне надо узнать путь к файлу (image.bmp) не указывая D:\Delphi\MyApp а начальной папкой должна быть Files\Image.bmp т.е начиная с той папки которая присутствует в папке с програмой.
Я путь Files\Image.bmp запишу в INI (Path=Files\Image.bmp)
Програма при запуску будет считывать где находиться Image.bmp
Тогда если папка с програмой будет перенесена например с D:\Delphi\MyApp в C:\All Programs\MyApp програма всеровно будет знать правильный путь к файлу Image.bmp
Германн (2008-09-19 21:33:00) [28]
> Помоему только слэша не хватает :)
>
Поэтому я и изменил чуть-чуть ответ ЮЗ :)
{RASkov} (2008-09-19 21:25:00) [29]> [5] Германн © (19.09.08 21:22)
> Не а. Там требовался результат в виде Files\Image.bmp :)
[0]
> Как получить путь "\Files\Image.bmp"
> а не "D:\MyApp\Files\Image.bmp"
> ???????
Помоему только слэша не хватает :)
Германн (2008-09-19 21:22:00) [30]
> Но вопрос один в один :)
Не а. Там требовался результат в виде Files\Image.bmp :)
{RASkov} (2008-09-19 21:19:00) [31]> Еще несколько часов назад была ветка
Ветки с данным вопросом - отстреливаются.
Буквально вчера тоже отвечал в одной из ныне уже не существующей... Но вопрос один в один :)
KilkennyCat (2008-09-19 21:14:00) [32]
> Германн © (19.09.08 21:04) [2]
это почти то же самое, что и [1]
хотя, delete наверное, быстрее работает, чем replace.
c другой стороны, длинну не надо вычсислять...
Германн (2008-09-19 21:04:00) [33]Странно. Еще несколько часов назад была ветка, где ЮЗ дал хороший ответ. А сейчас не смог найти. Тогда продублирую:
Delete(S,1,Length(ExtractFileDir(Application.ExeName));
S - Строка содержащая D:\MyApp\Files\Image.bmp
Сергей М. (2008-09-19 20:34:00) [34]Пес дворовый - все понимаю, а сказать не могу)
Тебе нужно получить строку относительногопути что ли ? Или где ?
> Как получить путь "\Files\Image.bmp"а не "D:\MyApp\Files\Image.
> bmp"
Как_получить := StringReplace('D:\MyApp\Files\Image.bmp', 'D:\MyApp', '', [])
Эта строчка кода делает именно то о чем ты спросил.
И не жалуйся что спросил не то и не так)