我经常使用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'.
你知道这样的功能吗?提前谢谢。
答案 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返回与第二个连接的第一个路径。
当问题被delphi
标记时,上面写着现在,对于FPC,通过 SysUtils 进行简单扫描即可让您进入
哪个
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.