与Pascal中的ExtractRelativePath相反的是什么?

时间:2014-01-17 07:50:08

标签: freepascal lazarus

我经常使用ExtractRelativePath来获取两个路径之间的相对路径。但我看不出任何相反的功能。这是freepascal.org的一个例子:

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'.

你知道这样的功能吗?提前谢谢。

1 个答案:

答案 0 :(得分: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;
  

描述

     

组合两个路径字符串。

     

调用组合以从两个不同的路径获取新的组合路径。如果   第二条路径是绝对的,Combine直接返回;除此以外   Combine返回与第二个连接的第一个路径。


当问题被

标记时,上面写着

现在,对于FPC,通过 SysUtils 进行简单扫描即可让您进入

  • C:\ codetyphon \ fpcsrc \ RTL \ objpas \ sysutils的\ finah.inc

哪个

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

记录了哪些内容
  

ConcatPaths

     

连接一系列路径以形成单个路径

     

声明

     

来源位置:finah.inc第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.