// 取兩個目錄的相對路徑,注意串尾不能是
'/'字元!
functiongetrelativepath(source, dest:string):string;
//交換字串
functiongetpathcomp(s1, s2:string): integer;
procedureswapstr(vars1, s2:string);
vartempstr:string;
begin
tempstr := s1;
s1 := s2;
s2 := tempstr;
end;
//比較兩路徑字串頭部相同串的函式
begin
iflength(s1) > length(s2) then swapstr(s1, s2);
result := pos(s1, s2);
whileresult = 0do
begin
ifs1 =
''then exit;
s1 := extractfiledir(s1);
result := pos(s1, s2);
end;
ifresult <> 0 then result := length(s1);
ifresult = 3 then result := 2;
//修正因
extractfiledir()
處理'c:/'
時產生的錯誤.
end;
functiongetroot(s: shortstring):string;
//取dest的相對根路徑的函式
vari: integer;
begin
result := '';
fori := 1tolength(s)do
ifs[i] =
'/'then result := result +
'../';
ifresult =
''then result :=
'./';
//如果不想處理成"./"的路徑格式,可去掉本行
end;
functionrightsub(s:string; len: integer):string;
begin
delete(s, 1, length(s) - len);
result := s;
end;
var
relativroot, relativsub:string;
headnum: integer;
//取右子串
begin
source := uppercase(source); dest := uppercase(dest);
//比較兩路徑字串頭部相同串
headnum := getpathcomp(source, dest);
//取dest的相對根路徑
relativroot := getroot(rightsub(dest, length(dest) - headnum));
//取source的相對子路徑
relativsub := rightsub(source, length(source) - headnum - 1);
//返回
result := relativroot + relativsub;
end;
//by
閆磊email:[email protected],[email protected] 2001.11.23
呼叫proceduretform1.button1click(sender: tobject);
begin
showmessage(getrelativepath(
'c:/test/aim'
, 'c:/test'
));
end;
delphi,由相對路徑獲得絕對路徑演算法
子串出現的次數 function var i integer p integer begin p pos sub,st i 0 whilep 0do begin inc i delete st,1,p length sub 1 p pos sub,st end result i end 按字串分解 ...
由絕對路徑求相對路徑
最近公司的乙個任務需要修改檔案原來的絕對路徑為相對路徑,於是寫了乙個方法 由絕對路徑獲得相對路徑 path2相對於path1的相對路徑 param path1 path1絕對路徑 param path2 path2絕對路徑 return 相對路徑 throws exception author pu...
相對路徑絕對路徑
前兩天突然發現自己一直以來對相對路徑絕對路徑的理解都是錯的,於是趕緊查了相關資料。1.絕對路徑 絕對路徑是指檔案在硬碟上真正存在的路徑。例如 bg.jpg 這個是存放在硬碟的 e book 網頁布局 第2章 目錄下,那麼 bg.jpg 這個的絕對路徑就是 e book 網頁布局 第2章 bg.jpg...