Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.26;
Скачать: CL | DM;

Вниз

Как получить путь к файлу?   Найти похожие ветки 

 
Сергей   (2008-09-19 20:02) [0]

Народ подскажите пожалуйста как узнать путь к файлу начиная с той папки, где находиться програма, а не с буквы диска и тд :

Например програма находиться в:
D:\MyApp\MyApp.exe
в папке D:\MyApp есть папка \Files\Image.bmp

Как получить путь "\Files\Image.bmp"
а не "D:\MyApp\Files\Image.bmp"
???????


 
Сергей М. ©   (2008-09-19 20:34) [1]

Пес дворовый - все понимаю, а сказать не могу)

Тебе нужно получить строку относительного пути что ли ? Или где ?


> Как получить путь "\Files\Image.bmp"а не "D:\MyApp\Files\Image.
> bmp"


Как_получить := StringReplace("D:\MyApp\Files\Image.bmp", "D:\MyApp", "",  [])

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


 
Германн ©   (2008-09-19 21:04) [2]

Странно. Еще несколько часов назад была ветка, где ЮЗ дал хороший ответ. А сейчас не смог найти. Тогда продублирую:
Delete(S,1,Length(ExtractFileDir(Application.ExeName));
S - Строка содержащая D:\MyApp\Files\Image.bmp


 
KilkennyCat ©   (2008-09-19 21:14) [3]


> Германн ©   (19.09.08 21:04) [2]

это почти то же самое, что и [1]
хотя, delete наверное, быстрее работает, чем replace.
c другой стороны, длинну не надо вычсислять...


 
{RASkov} ©   (2008-09-19 21:19) [4]

> Еще несколько часов назад была ветка

Ветки с данным вопросом - отстреливаются.
Буквально вчера тоже отвечал в одной из ныне уже не существующей... Но вопрос один в один :)


 
Германн ©   (2008-09-19 21:22) [5]


> Но вопрос один в один :)

Не а. Там требовался результат в виде Files\Image.bmp :)


 
{RASkov} ©   (2008-09-19 21:25) [6]

> [5] Германн ©   (19.09.08 21:22)
> Не а. Там требовался результат в виде Files\Image.bmp :)


[0]
> Как получить путь "\Files\Image.bmp"
> а не "D:\MyApp\Files\Image.bmp"
> ???????

Помоему только слэша не хватает :)


 
Германн ©   (2008-09-19 21:33) [7]


> Помоему только слэша не хватает :)
>

Поэтому я и изменил чуть-чуть ответ ЮЗ :)


 
Сергей   (2008-09-19 22:27) [8]

Неа не подходит. Коротше. Мне нада используя 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


 
Renegat ©   (2008-09-19 22:34) [9]

.\Files\Image.bmp


 
KilkennyCat ©   (2008-09-19 22:34) [10]

мда...
что такое OpenDialog.FileName?
сам отвечу:
например, это S - Строка содержащая D:\MyApp\Files\Image.bmp из ответа выше. И чем же не подходит-то?


 
{RASkov} ©   (2008-09-19 22:43) [11]

См ExtractFileXxxxx - тут(в Ххххх) тебе и имя и путь и чего хочешь.... а уж как все это скомпоновать, думаю сообразишь или ты дворник?


 
{RASkov} ©   (2008-09-19 22:49) [12]

const
 DIR_FILES = "Files";
........
var S: String;
..........
S:=IncludeTrailingPathDelimiter(DIR_FILES)+ExtractFileName(OpenDialog.FileName);


 
Сергей   (2008-09-20 00:14) [13]

Нет не подходит. Попробую еще раз обьяснить. Ситуация такая: В 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

Надеюсь я правильно обяснил :)


 
KilkennyCat ©   (2008-09-20 00:26) [14]

if opendialog1.execute then begin
 ТоЧтоНадо := Delete(opendialog1.filename,1,Length(ExtractFileDir(Application.ExeName));
...
end;


 
{RASkov} ©   (2008-09-20 00:32) [15]

> [13] Сергей   (20.09.08 00:14)

Ёшкин кот.... вместо столькой писанины, лучшеб поизучал ответы выше....

> при чем папка "ROM" может иметь любое имя

Ну так чем тут не устраивает [1] или [2]?
А если честно, то или я ничего не понял, так, как ответы выше решают все проблемы, или ...я ничего не понял :(


 
{RASkov} ©   (2008-09-20 00:34) [16]

> ТоЧтоНадо := Delete(....

Гы) Пусть вообще голову сломает :)


 
KilkennyCat ©   (2008-09-20 00:34) [17]


> я ничего не понял :(

значит, твой уровень ниже :)
учись, студент! (с) известный фильм


 
{RASkov} ©   (2008-09-20 00:38) [18]

> [17] KilkennyCat ©   (20.09.08 00:34)
> значит, твой уровень ниже :)

Да ну его.... со своим уровнем :)
Задача проста как два байта переслать, а он себе ищет проблемы)


 
Сергей   (2008-09-20 00:42) [19]

Народ спасибо шас попробую. Вобще то я ничего не изучал. Я методом втыка, но тем не менее что то получаеться. Так что если что не так разяснил, извеняйте. Уж очень хочу научиться програмировать, может посоветуете какие то хорошие книги ???


 
KilkennyCat ©   (2008-09-20 00:47) [20]

Тейксера и Пачеко.


 
{RASkov} ©   (2008-09-20 00:53) [21]

> [19] Сергей   (20.09.08 00:42)
> может посоветуете какие то хорошие книги ???

Тебе с картинками или без? :)
А если честно, то их полно.... попробуй вот так:
http://yandex.ru/yandsearch?text=%D1%85%D0%BE%D1%80%D0%BE%D1%88%D0%B0%D1%8F+%D0%BA%D0%BD%D0%B8%D0%B3%D0%B0+%D0%B4%D0%B5%D0%BB%D1%84%D0%B8&clid=14585
Или в вариациях....
+ [20] Марко Кэнту не плохой автор...


 
Германн ©   (2008-09-20 01:01) [22]


> Сергей   (20.09.08 00:42) [19]
>
> Народ спасибо шас попробую.

Так ты до сих пор так ни разу и не пробовал применить данные тебе советы на практике!? Уже третий день морочишь нам голову ничего сам не делая?

> Я методом втыка

Вот эт точно. "Втыкаешь" нам, а мы дурни и рады. Предлагаем и то и сё и пятое и десятое.
:)


 
KilkennyCat ©   (2008-09-20 01:55) [23]


> а мы дурни и рады.

дурни, потому что рады, или рады, потому что дурни?
философия!


 
Германн ©   (2008-09-20 02:03) [24]


> KilkennyCat ©   (20.09.08 01:55) [23]

Ну если и философия, то хоть не МЛФ. И на том спасибо. :)


 
KSergey ©   (2008-09-20 14:39) [25]

> Сергей   (19.09.08 22:27) [8]
> Мне нада используя OpenDialog
> выбрать файл
> Тогда если папка с програмой будет перенесена например с
>  D:\Delphi\MyApp в C:\All Programs\MyApp програма всеровно
> будет знать правильный путь к файлу Image.bmp

А если пользователь выберет bmp-файл вообще с другого диска? Все равно резать?


 
KSergey ©   (2008-09-20 14:41) [26]

> Германн ©   (19.09.08 21:04) [2]
> Delete(S,1,Length(ExtractFileDir(Application.ExeName));
> S - Строка содержащая D:\MyApp\Files\Image.bmp

В буквальном применении путь этот опасен тем, что S может содержать полный путь до файла вообще с другого диска или с другой корневой папки этого диска.


 
{RASkov} ©   (2008-09-20 14:49) [27]

> [25] KSergey ©   (20.09.08 14:39)

> [26] KSergey ©   (20.09.08 14:41)

Это не великая проблема, нужно всего лишь иметь "думалку")
Или посты с ответами - это конечные результаты?
В принципе и твои посты - это всего лишь намек автору :)


 
KSergey ©   (2008-09-20 15:00) [28]

> {RASkov} ©   (20.09.08 14:49) [27]
> В принципе и твои посты - это всего лишь намек автору :)

Мои посты - так, выпендреж на самом деле.
А автору уже ничего не поможет. Это какой-то писатель, читать он точно не умеет. Либо ему забыли сказать, что прочитанное всегда надо осмысливать, а не только читать.


 
Сергей   (2008-09-20 19:08) [29]

> А автору уже ничего не поможет. Это какой-то писатель, читать он точно не умеет. Либо ему забыли сказать, что прочитанное всегда надо осмысливать, а не только читать.

Ха Ха. и Ха Ха. Ну вы программисты интересный народ. Ето П.П. Вы что думаете вы слишком умные???  
А на счет писателя, то ты сам писатель. От подумай логично, если у тебя есть  "думалка", кто тут больше писал? ой, написал всякой х-ни?? Я или ты?

Я всего лишь хотел узнать как сделать то что я просил. За то вам спасибо, все работает. А вот нах меня обсуждать?

Нет чтоб подправить, подсказать, а вы... Льолики!.

S:= ExtractFilepath (OpenDlg.FileName);
Delete(S,1,Length(ExtractFileDir(Application.ExeName)));
Edit1.Text := S +  ExtractFileName (OpenDlg.FileName);


 
KilkennyCat ©   (2008-09-20 19:24) [30]

Надеюсь, ты получил ответы на все вопросы. Ибо в дальнейшем тут вряд ли захотят тебе отвечать в дальнейшем.
Ибо все равно, несмотря на все мученья и готовое решение, приведенный тобой код - брррр....


 
turbouser ©   (2008-09-20 19:24) [31]


> Сергей   (20.09.08 19:08) [29]


> Ха Ха. и Ха Ха.

Это лечится взрослением. Жаль не всегда...


 
KilkennyCat ©   (2008-09-20 19:26) [32]


> turbouser ©   (20.09.08 19:24) [31]


Не совсем. Взросление - лишь способ. А лечит - конечный результат, СМЕРТЬ!!!


 
Renegat ©   (2008-09-20 22:09) [33]

> [29] Сергей   (20.09.08 19:08)

хоссспадииии, шотутделаетсятоооо... %)
Нельзя ли просто сделать присвоение S:=OpenDlg.FileName, а затем пройтись по Application.ExeName поиском по последнему бэк-слэшу ("\"), подставив в Delete результат поиска?

ЗЫ.
Не думайте, что вы здесь единственный-неповторимый.
Таких как вы, на этом форуме сотни.
Задавших тот же самый вопрос - не один десяток.
Натурально, скучно становится.
И вы бы, в ответ на справедливую критику в свой адрес, не исходили на мыло,
наезжая на помогших вам, а попытались бы понять, что эту критику вызвало.
Если не можете - бог вам судья.
В таком случае, как говорит госп. Германн ©, примите и прочь!


 
{RASkov} ©   (2008-09-20 22:37) [34]

> S:= ExtractFilepath (OpenDlg.FileName);
> Delete(S,1,Length(ExtractFileDir(Application.ExeName)));
> Edit1.Text := S +  ExtractFileName (OpenDlg.FileName);

5-2-3+2 - что-то тут не то) Ага, 5-3 - достаточно :)



Страницы: 1 вся ветка

Текущий архив: 2008.10.26;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.015 c
15-1218174240
TUser
2008-08-08 09:44
2008.10.26
Объявлена дата запуска LHC


2-1221827778
Vlad Oshin
2008-09-19 16:36
2008.10.26
Вот так оптимизатор..


2-1221721382
Mahno
2008-09-18 11:03
2008.10.26
Помогите с вычислением


2-1221425519
Дима С
2008-09-15 00:51
2008.10.26
Событие изменния ComboBox-a


15-1220267957
Adventure
2008-09-01 15:19
2008.10.26
Слеить EXE и DLL