Форум: "Начинающим";
Текущий архив: 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