【转】相对路径和绝对路径的转换

时间:2022-06-01 19:03:31
unit xPath;  

interface
uses ShlwApi, Windows, SysUtils;

/// <summary>
//
/ 取绝对路径的函数。需要引用 ShlwApi.pas
//
/ </summary>
//
/ <param name="BasePath">参考路径</param>
//
/ <param name="RelativePath">相对路径</param>
//
/ <code>
//
/ S := GetAbsolutePath('C:\Windows\System32', '..\DEMO.TXT')
//
S 将得到 'C:\Windows\DEMO.TXT
//
/ </code>
function GetAbsolutePathEx(BasePath, RelativePath:string):string;


/// <summary>
//
/ 取得本身程序的路径
//
/ </summary>
function AppPath : string;
function GetRelativePath(const Path, AFile: string): string;


implementation
function GetAbsolutePathEx(BasePath, RelativePath:string):string;
var
Dest:
array [0..MAX_PATH] of char;
begin
FillChar(Dest,MAX_PATH
+1,0);
PathCombine(Dest,PChar(BasePath), PChar(RelativePath));
Result:
=string(Dest);
end;

function GetRelativePath(const Path, AFile: string): string;
function GetAttr(IsDir: Boolean): DWORD;
begin
if IsDir then
Result :
= FILE_ATTRIBUTE_DIRECTORY
else
Result :
= FILE_ATTRIBUTE_NORMAL;
end;
var
p:
array[0..MAX_PATH] of Char;
begin
PathRelativePathTo(p, PChar(Path), GetAttr(False), PChar(AFile), GetAttr(True));
Result :
= StrPas(p);
end;

function AppPath : string;
begin
Result :
= extractFilePath(Paramstr(0));
end;
end.

{
ExpandFileName() 返回文件的全路径(含驱动器、路径)
ExtractFileExt() 从文件名中抽取扩展名
ExtractFileName() 从文件名中抽取不含路径的文件名
ExtractFilePath() 从文件名中抽取路径名
ExtractFileDir() 从文件名中抽取目录名
ExtractFileDrive() 从文件名中抽取驱动器名
ChangeFileExt() 改变文件的扩展名
ExpandUNCFileName() 返回含有网络驱动器的文件全路径
ExtractRelativePath() 从文件名中抽取相对路径信息
ExtractShortPathName() 把文件名转化为DOS的8·3格式
MatchesMask() 检查文件是否与指定的文件名格式匹配
ExtractFilePath(FileName:String)
该函数返回路径名,其结尾字符总是“\”

ExtractFileDir(FileName:String)
}