Delphi中的目录路径操作?

时间:2013-02-01 03:26:16

标签: delphi path delphi-2007

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

c:\foo\bar

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

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

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

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

4 个答案:

答案 0 :(得分:11)

使用ExpandFileName功能:

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

以上示例中的消息将显示c:\foo路径。

答案 1 :(得分:4)

查看ExtractFilePath()ExtractFileDir()。这些版本几乎适用于所有Delphi版本,特别是那些没有TDirectory,IOUtils等的版本。

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

答案 2 :(得分: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;

旧版本

看看其他答案。

答案 3 :(得分:1)

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

var
  LFullPath: string;
begin
  LFullPath := TPathBuilder.InitCustomPath('c:\foo\bar').GoUpFolder.AddFile('baz.txt').ToString;
  //LFullPath = c:\foo\baz.txt