转换为绝对路径 不就行么?
path + application.pathname
path + application.pathname
解决方案 »
- delphi使用fastreport如何打印指定的一条记录
- 请问函数形参是对象的话,这个对象是值还是址?
- 请用哪种报表可以实现,合并相同的记录呢?
- 初次接触com, 客户端在Result := CreateRemoteComObject(MachineName, CLASS_aaa) as Iaaa时,提示: rpc服务器不可用
- 在两个不同的unit中如何共享全局变量?
- 怎样用线程控制Form 中的暂停和停止按钮???
- 讨论一下将来C#、C++、Delphi谁会一统天下。希望大家畅所欲言。
- 请教各位朋友有谁知道Delphi自带的数据库,通过SQL语句查询日期的写法?(无正文)
- 怎样压缩含有密码的保护的access库
- z_jingxin(雪狼) 请进来
- ****自制组件,请帮忙!****
- 我用的是sql server数据库,我如何在delphi里面捕获数据库的日志信息 (急急急)
uses SysUtils;
//取右子串
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;
//比较两路径字符串头部相同串的函数
begin
if length(s1) > Length(s2) then swapStr(s1,s2); Result := pos(s1,s2);
while Result = 0 do
begin
if s1 = '' then exit;
s1 := ExtractFileDir(s1);
Result := pos(s1,s2);
end; if Result <> 0 then Result := Length(s1);
if Result = 3 then Result := 2;
//修正因ExtractFileDir()处理'c:\'时产生的错误.
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); //取Dest的相对根路径
RelativRoot := GetRoot(RightSub(Dest,Length(Dest) - HeadNum)); //取Source的相对子路径
RelativSub := RightSub(Source,Length(Source) - HeadNum - 1); //返回
Result := RelativRoot + RelativSub;
end;begin
/// TEST!!!
Writeln(GetRelativePath('c:\test\aim','c:\test')); // result = '.\aim'
Writeln(GetRelativePath('c:\test','c:\test\1\2')); // result = '..\..\'
Writeln(GetRelativePath('c:\aim','c:\test')); // result = '..\aim'
Writeln(GetRelativePath('c:\dest\aim','c:\test\aim'));
// result = '..\..\aim'
end.