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 nethttpclient1 数据库查询

Delphi 掌控pagecontrol中的右上方的左右箭头事件

Delphi datetimetostr函数专用优化版

Delphi unicode转中文编码

手动创建和部署一个classes.dex 查看更多关于 classes.dex 的文章 文件

Delphi 调试tms web core应用

Delphi opendialog设置默认打开路径

Delphi 几个dataset数据导出到xml word excel txt html的函数

Delphi 根据磁盘盘符获取简单的硬盘编号

Delphi判断字符串是否包含限制以外的字符 否则置空

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



打赏

取消

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

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

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

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

评论

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