我有一个给定文件夹的完整路径名,例如
c:\foo\bar
现在我想在c:\ foo中引用一个名为baz.txt的文件,
c:\foo\bar\..\baz.txt
我目前正在使用.. path运算符向下一级并获取我需要的文件。
是否有可以进行路径操作的功能,例如UpOneLevel(str) - > str?我知道我可以通过拆分字符串并删除最后一个令牌来编写一个,但我宁愿它是一个内置/库函数,所以如果有例如,我不会遇到麻烦。逃脱反斜杠。
答案 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