运行这个片段
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
。
据我了解Test
并Test\
指向目录结构中的同一文件夹。如果我想获取父级(上一个文件夹),那么Directory.GetParent
应该返回上一个文件夹,而不是 Test
再次文件夹。
问题:当我需要获取父目录之一时,如何正确处理给定路径末尾可能出现的斜杠?
只需从输入字符串中修剪它即可。使用TrimEnd
:
Console.WriteLine(Directory.GetParent(path1.TrimEnd('\\')));
Run Code Online (Sandbox Code Playgroud)
但是,当字符串终止时返回完整路径\
是所需的行为
但是,传递“C:\Directory\SubDirectory\”将返回“C:\Directory\SubDirectory”,因为结束目录分隔符位于“SubDirectory”之后。