delphi 计算一个路径相对于另一路径的相对路径


本文整理自网络,侵删。

 Function RightSub(s:string; Len:Integer) : string;
begin
Delete(s,1,Length(s)-Len);
Result := s;
end;
//交换字串
procedure swapStr(var s1,s2 : string);
var tempstr : string;
begin
tempstr := s1;
s1 := s2;
s2 := tempstr;
end;

// 取两个目录的相对路径,注意串尾不能是'\'字符!
Function GetRelativePath(Source,Dest : string) : string;
Function GetPathComp(s1,s2:string) : integer;
//比较两路径字符串头部相同串的函数
var
s:string;
begin
if length(s1) > Length(s2) then swapStr(s1,s2);

Result := pos(s1,s2);
s:=s1;
while Result = 0 do
begin
s1 := ExtractFileDir(s1);
if (s='') or (s=s1) then
begin //修正因ExtractFileDir()处理'c:\'时产生的错误.
Result:=-1;
exit;
end;
s:=s1;
Result := pos(s1,s2);
end;

if Result <> 0 then Result := Length(s1);

End;

Function GetRoot(s : ShortString) : string;
//取Dest的相对根路径的函数
var i : integer;
begin
Result := '';
for i := 1 to Length(s) do
if s[i] = '\' then Result := Result + '..\';
if Result = '' then Result := '.\';
//如果不想处理成"."的路径格式,可去掉本行
end;

var RelativRoot, RelativSub : string;
HeadNum : integer;
begin
Source := UpperCase(Source); Dest := UpperCase(Dest);

//比较两路径字符串头部相同串
HeadNum := GetPathComp(Source,Dest);
if headNum=-1 then
begin
result:=Source;
exit;
end;

//取Dest的相对根路径
RelativRoot := GetRoot(RightSub(Dest,Length(Dest) - HeadNum));

//取Source的相对子路径
RelativSub := RightSub(Source,Length(Source) - HeadNum - 1);

//返回
Result := RelativRoot + RelativSub;
end;

相关阅读 >>

Delphi lockbox 做加密解密

Delphi xe安装 tclientsocket, tserversocket控件

winapi 字符及字符串函数(12): lstrlen - 串长度

Delphi listview 设置固定列宽

Delphi 鼠标跟随代码

Delphi 如何判断可见字符 unicode

Delphi exe执行程序dos参数的运用

Delphi byte数组根据utf8 转换为string

Delphi 高速替换大文本字符串内容

Delphi 获取系统时间,获取系统年月日,时分秒

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...