Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
Сергей   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.006 c
15-1220435620
diiimmmmaaaaa
2008-09-03 13:53
2008.10.26
ICQ клиент (выбрать)


6-1194680858
Winni
2007-11-10 10:47
2008.10.26
Как программно подключиться к Инету ?


2-1221731916
cyborg
2008-09-18 13:58
2008.10.26
Нужен совет по выбору компонента


15-1220252009
Игорь Шевченко
2008-09-01 10:53
2008.10.26
Дмитрий Акуличев, с днем рождения!


2-1221804460
Wood
2008-09-19 10:07
2008.10.26
TWebBrowser, выделение текста в нужном месте.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский