Directory.GetParent 和斜杠

Sin*_*atr 5 c# path

运行这个片段

var path1 = @"C:\Temp\SomeFolder";
var path2 = @"C:\Temp\SomeFolder\";
Console.WriteLine(Directory.GetParent(path1));
Console.WriteLine(Directory.GetParent(path2));
Run Code Online (Sandbox Code Playgroud)

输出

C:\温度

C:\Temp\SomeFolder

与 相同的故事Path.GetDirectoryName(),也可用于获取父文件夹,但在以下情况下同样会失败\在最后的

我真的很喜欢Path.Combine()忽略最后的斜杠,并且真的很讨厌一些使用斜杠返回路径的方法的人(指*angryface*AppDomain.CurrentDomain.BaseDirectory )。

问题:当我需要获取父目录之一时,如何正确处理给定路径末尾可能存在的斜杠?


这是另一个片段

var path1 = @"C:\Temp\SomeFolder";
var path2 = @"C:\Temp\SomeFolder\";
var dir1 = @"Test";
var dir2 = @"Test\";
Console.WriteLine(Path.Combine(path1, dir1));
Console.WriteLine(Path.Combine(path1, dir2));
Console.WriteLine(Path.Combine(path2, dir1));
Console.WriteLine(Path.Combine(path2, dir2));
Run Code Online (Sandbox Code Playgroud)

输出

C:\Temp\SomeFolder\测试

C:\Temp\SomeFolder\测试\

C:\Temp\SomeFolder\测试

C:\Temp\SomeFolder\测试\

Path.Combine工作正常(忽略第一个路径的结束斜杠,或者在丢失时添加它),同时保留第二个路径的结束斜杠(无论出于何种原因,我不在乎,因为在更多中使用结果路径Path.Combines

据我了解TestTest\指向目录结构中的同一文件夹。如果我想获取父级(上一个文件夹),那么Directory.GetParent应该返回上一个文件夹,而不是 Test再次文件夹。

Hab*_*bib 4

问题:当我需要获取父目录之一时,如何正确处理给定路径末尾可能出现的斜杠?

只需从输入字符串中修剪它即可。使用TrimEnd

Console.WriteLine(Directory.GetParent(path1.TrimEnd('\\')));
Run Code Online (Sandbox Code Playgroud)

但是,当字符串终止时返回完整路径\是所需的行为

Directory.GetParent 方法

但是,传递“C:\Directory\SubDirectory\”将返回“C:\Directory\SubDirectory”,因为结束目录分隔符位于“SubDirectory”之后。