2014-01-17 1 views
0

Я часто использую ExtractRelativePath, чтобы получить относительный путь между двумя путями. Но я не вижу никакой функции, противоположной ей. Это пример из freepascal.org:Что противоположно ExtractRelativePath в Паскале?

Uses sysutils; 

Procedure Testit (FromDir,ToDir : String); 

begin 
    Write ('From "',FromDir,'" to "',ToDir,'" via "'); 
    Writeln (ExtractRelativePath(FromDir,ToDir),'"'); 
end; 

Begin 
Testit ('/pp/src/compiler','/pp/bin/win32/ppc386'); 
Testit ('/pp/bin/win32/ppc386','/pp/src/compiler'); 
Testit ('e:/pp/bin/win32/ppc386','d:/pp/src/compiler'); 
Testit ('e:\pp\bin\win32\ppc386','d:\pp\src\compiler'); 
End. 

Выход этой программы

From "/pp/src/compiler" to "/pp/bin/win32/ppc386" via "../bin/win32/ppc386" 
From "/pp/bin/win32/ppc386" to "/pp/src/compiler" via "../../src/compiler" 
From "e:/pp/bin/win32/ppc386" to "d:/pp/src/compiler" via "../../src/compiler" 
From "e:\pp\bin\win32\ppc386" to "d:\pp\src\compiler" via "../../src/compiler" 

мне нужно функцию F, чтобы выполнить обратное действие ExtractRelativePath, например:

F('/pp/src/compiler', '../bin/win32/ppc386') return '/pp/bin/win32/ppc386'. 

Знаете ли вы какую-либо функцию? Заранее спасибо.

+2

возможно дубликат [Преобразование между абсолютными и относительными путями в Delphi] (http://stackoverflow.com/questions/5329472/conversion-between-absolute-and-relative-paths -in-delphi) – GolezTrol

+0

@ GolezTrol, который не связан с расширением, что si о слиянии полностью с относительным. –

+0

http://www.delphipages.com/forum/showthread.php?t=173795 –

ответ

4

Да, конечно. http://docwiki.embarcadero.com/Libraries/XE5/en/System.IOUtils.TPath.Combine

System.IOUtils.TPath.Combine

class function Combine(const Path1, Path2: string): string; inline; static; 

Описание

Объединяет два пути строки.

Call Combine, чтобы получить новый комбинированный путь от двух разных путей. Если второй путь является абсолютным, Combine возвращает его напрямую; в противном случае Комбинация возвращает первый путь, конкатенированный со вторым.


Выше было написано, когда вопрос был помечен на

Теперь для FPC простого сканирования через SysUtils источники земли вы на

  • C: \ codetyphon \ fpcsrc \ rtl \ objpas \ sysutils \ finah.inc

Который имеет

function ConcatPaths(const Paths: array of String): String; 

Который документированный в

ConcatPaths

Concatenate массив путей, чтобы сформировать единый путь

Объявление

Исходное положение: finah.inc line 42 function ConcatPaths (const Paths: array of) :;

Описания

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

Пример

program ex96; 

{ This program demonstrates the Concatpaths function } 

uses sysutils; 

begin 
    // will write /this/path/more/levels/ 
    Writeln(ConcatPaths(['/this/','path','more/levels/'])); 
    // will write this/path/more/levels/ 
    Writeln(ConcatPaths(['this/','path','more/levels/'])); 
    // will write this/path/more/levels 
    Writeln(ConcatPaths(['this/','path','more/levels'])); 
end. 
+0

+1, собирался ответить тем же. –

+0

Вопрос о FreePascal и Lazarus –

+0

@DavidHeffernan О, действительно. Спасибо за исправление тегов. Но пусть этот ответ останется ненадолго, как чаевые для дальнейших читателей. –

 Смежные вопросы

  • Нет связанных вопросов^_^