6

我有给定文件夹的完整路径名,例如

c:\foo\bar

现在我想在 c:\foo 中引用一个名为 baz.txt 的文件,

c:\foo\bar\..\baz.txt

我目前正在使用 .. 路径运算符向下一层并获取我需要的文件。

是否有可以进行路径操作的函数,例如 UpOneLevel(str) -> str ?我知道我可以通过拆分字符串并删除最后一个标记来编写一个,但我宁愿它是一个内置/库函数,所以如果有例如转义的反斜杠,我以后不会遇到麻烦。

4

4 回答 4

11

使用ExpandFileName功能:

var
  S: string;
begin
  S := 'c:\foo\bar\..';
  S := ExpandFileName(S);
  ShowMessage(S);
end;

来自上述示例的消息将显示c:\foo路径。

于 2013-02-01T03:47:26.820 回答
4

ExtractFilePath()ExtractFileDir()。这些几乎在所有 Delphi 版本中都可用,尤其是那些没有 TDirectory、IOUtils 等的版本。

在任何人说之前,无论路径是否以文件名结尾,这些都可以正常工作。ForceDirectories()例如,在内部使用它们向后遍历父文件夹的层次结构。

于 2013-02-01T04:36:42.240 回答
3

这个答案对 Delphi XE + 有效

使用 IOutils 单元的TDirectory类,它具有GetParent方法,如下所示:

uses IOUtils;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  s := 'c:\foo\bar';
  ShowMessage(TDirectory.GetParent(s));
end;

在旧版本中

看看其他答案。

于 2013-02-01T03:38:57.127 回答
1

您可以从delphi-oop库中查看 SvClasses单元中的TPathBuilder记录。本单元不支持 Delphi 2007,但实现与此 Delphi 版本兼容。示例用法:TPathBuilder

var
  LFullPath: string;
begin
  LFullPath := TPathBuilder.InitCustomPath('c:\foo\bar').GoUpFolder.AddFile('baz.txt').ToString;
  //LFullPath = c:\foo\baz.txt
于 2013-02-01T08:44:34.977 回答