gpt4 book ai didi

file - 如何使用反斜杠符号和 2 个点 ('\..' 获取文件路径

转载 作者:行者123 更新时间:2023-12-04 08:14:32 25 4
gpt4 key购买 nike

在 Delphi 程序中,我使用 ExtractFileDir 函数获取父文件夹,此代码正常工作:

Fmain.frxReport1.LoadFromFile(ExtractFileDir(ExtractFileDir(ExtractFileDir(ExtractFilePath(ParamStr(0)))))+'\FastReports\report1.fr3');
如何修改它并获取父文件夹的路径 使用 "\.."因为它是在 Delphi 示例程序中实现的
enter image description here
更新:
我写了这段代码:
setcurrentdir('../../');
s1:=getcurrentdir();
frxReport1.LoadFromFile(s1+'\FastReports\report1.fr3');
但我想要一行(作为我的代码与 ExtractFileDir )和易读的代码来替换我的代码。

最佳答案

我有一个绝对化相对路径的函数。
要绝对化路径,您需要知道基本路径。
我在你展示的 Delphi 的情况下,路径是相对于项目目录的。
获得绝对路径后,您可以多次应用 ExtractFilePath 以进入目录级别。
让我们举个例子:你有一个相对路径“....\SomeFile.txt”。此路径相对于基本路径“C:\ProgramData\Acme\Project\Demo”。完整路径为:“C:\ProgramData\Acme\Project\Demo....\SomeFile.txt”。那么 AbsolutizePath 的绝对路径结果将是“C:\ProgramData\Acme\SomeFile.txt”。
请注意,绝对路径处理“..”(父目录)、“.” (当前目录)和驱动器规范(如 C:)。

function AbsolutizePath(
const RelPath : String;
const BasePath : String = '') : String;
var
I, J : Integer;
begin
if RelPath = '' then
Result := BasePath
else if RelPath[1] <> '\' then begin
if (BasePath = '') or
((Length(RelPath) > 1) and (RelPath[2] = ':')) then
Result := RelPath
else
Result := IncludeTrailingPathDelimiter(BasePath) + RelPath;
end
else
Result := RelPath;
// If there is no drive in the result, add the one from base if any
if (Length(Result) > 1) and (Result[2] <> ':') and
(Length(BasePath) > 1) and (BasePath[2] = ':') then
Insert(Copy(BasePath, 1, 2), Result, 1);
// Delete "current dir" marker
I := 1;
while TRUE do begin
I := Pos('\.\', Result, I);
if I <= 0 then
break;
Delete(Result, I, 2);
end;
// Process "up one level" marker
I := 1;
while TRUE do begin
I := Pos('\..\', Result, I);
if I <= 0 then
break;
J := I - 1;
while (J > 0) and (not CharInSet(Result[J], ['\', ':'])) do
Dec(J);
// Check if we hit drive delimiter and fix it
if (J = 2) and (Result[J] = ':') then
J := 3;
Delete(Result, J + 1, I - J + 3);
I := J;
end;
end;

关于file - 如何使用反斜杠符号和 2 个点 ('\..' 获取文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65776246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com