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

Вниз

Относительный путь к файлу   Найти похожие ветки 

 
Viktop   (2005-08-18 18:59) [0]

Как можно узнать относительный путь файла от исполняемого файла.
Исполняемый файл находится в папке c:\proga\super\project.exe
А файл, до которого нужного вывести относительный путь в папке
1) c:\proga\super\files\file1\1.txt
2) c:\proga\2.txt
В 1 варианте должно получиться file1\1.txt
во 2м - ..\2.txt
Вроде так должно быть. Может функция какя есть стандартная?


 
RusLAN_   (2005-08-18 19:40) [1]

Стандартной ИМХО нет.

Надо "вычесть" короткий путь из длинного
если короткий путь - это путь к прораме, то то что останется будет относительным путем к файлу
если короткий путь - это путь к файлу то в том что останется надо заменить имена каталогов двумя точками (получим чтото типа ..\..\2.тхт)

это все при условии что один путь обязательно содержит второй.

а для чего такая задача, может конечного результата можна достичь и без решения этой проблемы.


 
TStas ©   (2005-08-18 19:52) [2]

Первая функция нужна, чтобы рассыпать в массив путь
function splitToTStringList(s1, s2:String):TStringList;
var
  i, ln:Integer;
  s:String;

begin
Result:=TStringList.Create;
if s2="" then //Если пустая строка, вернуть массив символов
  begin
  for i:=1 to Length(s1) do Result.Add(s1[i]);
  exit;
  end;
ln:=Length(s2);
while (Pos(s2, s1)<>0) do
begin
i:=Pos(s2, s1);
s:=Copy(s1, 1, i-1);
Delete(s1, 1, i+ln-1);
Result.Add(s);
end;

Result.Add(s1);
end;

{Принимает относительный путь, как его на HTML пишут, возвращает абсолютный}
function RelativePath(const p1, p2:String):String;
var
 i, m:Byte;
 list1, list2:TStringList;
begin
List1:=splitToTStringList(p1, "\");
List2:=splitToTStringList(p2, "\");
list1.Delete(List1.Count-1); //Стираю в списке имя самого файла
if List1.Count<List2.Count then m:=List1.Count
else m:=List2.Count;
Result:="";
for i:=0 to m-1 do
 begin
 if List1[0]=List2[0] then
   begin
   list1.Delete(0);
   List2.Delete(0);
   //ShowMessage(List1.Text+#13#10+List2.Text);
   end
 else break;
 end;
if list1.Count>0 then for i:=0 to list1.Count-1 do Result:=Result+"../"; //Папки, на которые надо подняться

for i:=0 to list2.Count-1 do
 begin
 Result:=Result+list2[i];
 if i<>list2.Count-1 then Result:=Result+"/";
 end;
List1.Free;
List2.Free;
end;

Вот и передать ей Application.ExeName


 
Antonn ©   (2005-08-18 20:02) [3]

Viktop   (18.08.05 18:59)
1) c:\proga\super\files\file1\1.txt
2) c:\proga\2.txt
В 1 варианте должно получиться file1\1.txt

а не files\file1\1.txt?


 
Джо ©   (2005-08-19 01:54) [4]

Есть такая функция ExtractRelativePath. Находится в SysUtils.


 
Viktop   (2005-08-19 05:41) [5]

to RusLAN
В папке с экзегником ещё несколько вложенных папко. Выбираем одну из них (любой уровень вложения) и строится дерево
выбранная папка
файлы
папки
А в свойство Data записывается путь от папки с экзешником

to Джо
Она у менячто-то не то выдаёт. Как использовать надо?


 
Джо ©   (2005-08-19 05:52) [6]


>  [5] Viktop   (19.08.05 05:41)
> Она у менячто-то не то выдаёт. Как использовать надо?


 ShowMessage(
   ExtractRelativePath("c:\progam\","c:\1.txt"));

 // или

 ShowMessage(
   ExtractRelativePath("c:\progam\","c:\progam\inner\1.txt"));


 
Джо ©   (2005-08-19 05:55) [7]

А вообще, судя по описанной задаче, тебе нужно совсем не то. А (рекурсивный) поиск в дереве каталогов.


 
Viktop   (2005-08-19 06:43) [8]

Поиск есть, только он строит дерево по полному пути (C:\...)
Добился, чтобы строил с выбранной папки.


 
Джо ©   (2005-08-19 10:04) [9]


>  [8] Viktop   (19.08.05 06:43)
> Добился, чтобы строил с выбранной папки.

Мои поздравления.



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

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

Наверх




Память: 0.47 MB
Время: 0.061 c
14-1125566980
palva
2005-09-01 13:29
2005.09.25
Подаете ли вы нищим?


4-1122975929
webpauk
2005-08-02 13:45
2005.09.25
Иконка


3-1123674484
yk
2005-08-10 15:48
2005.09.25
как сортировать ?


1-1125394958
Max4
2005-08-30 13:42
2005.09.25
перевести текстовый файл из Dos в Windows кодировку


8-1115611310
Viktop
2005-05-09 08:01
2005.09.25
Проиграть музыку из ресурса





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский