Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить путь к файлу? [D7, XP]


Страницы:   1 2

Сергей ©   (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', '',  [])

Эта строчка кода делает именно то о чем ты спросил.
И не жалуйся что спросил не то и не так)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо