编辑:下面的答案中提到的规范化仅在使用路径访问文件系统时发生,而不是在字符串本身上。相比之下,答案
here纯粹使用路径字符串实现了结果和规范化,而根本不使用文件系统。
我发现System.IO.Path.Combine(myPath, "..")
的变体是最简单和最可靠的。如果northben所说的是真的,那么GetParent
如果有尾部斜杠,则需要额外调用。对我来说,这是不可靠的。
Path.Combine
确保您在斜杠上永远不会出错。
..
在Windows中的行为与其他地方完全相同。您可以在cmd或资源管理器中的路径中添加任意数量的\..
,它将完全按照我下面描述的方式运行。
一些基本的..
行为:
- 如果有文件名,
..
将删除它:
Path.Combine(@"D:\Grandparent\Parent\Child.txt", "..")
=> D:\Grandparent\Parent\
- If the path is a directory,
..
will move up a level:
Path.Combine(@"D:\Grandparent\Parent\", "..")
=> D:\Grandparent\
..\..
follows the same rules, twice in a row:
Path.Combine(@"D:\Grandparent\Parent\Child.txt", @"..\..")
=> D:\Grandparent\
Path.Combine(@"D:\Grandparent\Parent\", @"..\..")
=> D:\
- And this has the exact same effect:
Path.Combine(@"D:\Grandparent\Parent\Child.txt", "..", "..")
=> D:\Grandparent\
Path.Combine(@"D:\Grandparent\Parent\", "..", "..")
=> D:\