如何获取FreePascal/Lazarus中路径的父目录路径?
How to get the parent directory path of a path in FreePascal/Lazarus?
我有一个保存为字符串的目录路径,想知道如何从该字符串中轻松可靠地提取父目录?
我试图查看 FileUtil 和 SysUtils 中是否有一些方法,但到目前为止还没有找到任何东西。
嗯,我当然是在这里问了才知道的:
parentDirPath := FileUtil.ExtractFileNameOnly(
FileUtil.ChompPathDelim(theSubDirPath));
...会做!
FileUtil.ChompPathDelim()
部分对于 "fool" FPC 来说是必要的,以相信顶级文件夹是 "file"(因此不允许尾部斜线)。
最简单的方法是找到最后一个路径分隔符和 trim 源字符串。顺便说一句,还有一些选择:
program Project1;
uses
sysutils;
var
sExe: string;
sParent: string;
sParentProper: string;
begin
sExe := ExtractFilePath(ParamStr(0)); // Get executable directory
Writeln(sExe);
sParent := IncludeTrailingPathDelimiter(sExe) + '..' + PathDelim; // Make parent path for executable
Writeln(sParent);
sParentProper := ExpandFileName(sParent); // Get absolute path based on relative path
WriteLn(sParentProper);
Readln;
end.
输出为:
C:\Users\nd\AppData\Local\Temp\
C:\Users\nd\AppData\Local\Temp\..\
C:\Users\nd\AppData\Local\
因此使用此技术的正确方法是 ExpandFileName(IncludeTrailingPathDelimiter(sBasePath) + '..')
PS: 我们只使用 sysutils
单元,因此它是纯 FPC 解决方案,不需要任何 LCL 库。
一个更简单的方法是:
parentDirPath := ExtractFilePath(ExcludeTrailingPathDelimiter(thePath));
这适用于三大平台(Linux、Mac、OSX和Windows),thePath可能指的是文件或文件夹。
我有一个保存为字符串的目录路径,想知道如何从该字符串中轻松可靠地提取父目录?
我试图查看 FileUtil 和 SysUtils 中是否有一些方法,但到目前为止还没有找到任何东西。
嗯,我当然是在这里问了才知道的:
parentDirPath := FileUtil.ExtractFileNameOnly(
FileUtil.ChompPathDelim(theSubDirPath));
...会做!
FileUtil.ChompPathDelim()
部分对于 "fool" FPC 来说是必要的,以相信顶级文件夹是 "file"(因此不允许尾部斜线)。
最简单的方法是找到最后一个路径分隔符和 trim 源字符串。顺便说一句,还有一些选择:
program Project1;
uses
sysutils;
var
sExe: string;
sParent: string;
sParentProper: string;
begin
sExe := ExtractFilePath(ParamStr(0)); // Get executable directory
Writeln(sExe);
sParent := IncludeTrailingPathDelimiter(sExe) + '..' + PathDelim; // Make parent path for executable
Writeln(sParent);
sParentProper := ExpandFileName(sParent); // Get absolute path based on relative path
WriteLn(sParentProper);
Readln;
end.
输出为:
C:\Users\nd\AppData\Local\Temp\
C:\Users\nd\AppData\Local\Temp\..\
C:\Users\nd\AppData\Local\
因此使用此技术的正确方法是 ExpandFileName(IncludeTrailingPathDelimiter(sBasePath) + '..')
PS: 我们只使用 sysutils
单元,因此它是纯 FPC 解决方案,不需要任何 LCL 库。
一个更简单的方法是:
parentDirPath := ExtractFilePath(ExcludeTrailingPathDelimiter(thePath));
这适用于三大平台(Linux、Mac、OSX和Windows),thePath可能指的是文件或文件夹。