System.IOUtils.TDirectory.GetParent 奇怪行为?

3
GetParent('c:\1\2\')的结果是'c:\1\2'GetParent('c:\1\2')的结果是'c:\1'
这是正常/预期的行为吗?如果是,背后的逻辑是什么?

你的目录结构/文件是什么? - Jan Doggen
1
函数接受尾随反斜杠作为正确的输入,但无法正确处理它。看起来这是一个错误。 - Andrei Galatyn
1
作为一种解决方法,您可以将其更改为 GetParent(ExcludeTrailingPathDelimiter('C:\1\2\')) - quasoft
2
“GetParent” 不是很智能 - 它实际上不会查询文件系统以确定 “2” 是文件还是目录,也不会查询路径中的文件名是否为空;它只是从末尾删除到最后一个反斜杠的所有内容。 - J...
1
@J...拥有与文件系统无关的字符串函数非常有用。 - David Heffernan
显示剩余2条评论
1个回答

5
这种行为可能看起来有点奇怪,但这是有意而为之的。这个类是基于.net类Directory建模的。 文档中针对Directory.GetParent的说明如下:

此方法返回的字符串包含路径中的所有字符,但不包括最后一个DirectorySeparatorChar或AltDirectorySeparatorChar。例如,将路径“C:\Directory\SubDirectory\test.txt”传递给GetParent会返回“C:\Directory\SubDirectory”。如果传递“C:\Directory\SubDirectory”,则返回“C:\Directory”。但是,传递“C:\Directory\SubDirectory\”将返回“C:\Directory\SubDirectory”,因为结束目录分隔符在“SubDirectory”之后。


感谢提供链接。Delphi的文档没有提到分隔符(反斜杠)的“问题”。 - Gabriel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接