System.IO.DirectoryInfo可能是最干净方式来完成你所要求的。
var path = "\\\\ServerName\\Documents\\MasterDocumentFolder\\";
string newPath = new DirectoryInfo(path).Parent.CreateSubdirectory("NewDocumentFolder1").FullName;
Console.WriteLine(newPath.FullName);
//> "\\ServerName\Documents\NewDocumentFolder1\"
注意的DirectoryInfo不需要现有的或访问的目录:
var dir = new DirectoryInfo(@"C:\Asdf\Qwer\Zxcv\Poiu\Lkj\Mn");
Console.WriteLine(dir.Exists);
//> False
但要确保它的存在是一个单元
var dir = new DirectoryInfo(@"C:\Asdf\Qwer\Zxcv\Poiu\Lkj\Mn");
dir.Create();
Console.WriteLine(dir.Exists);
//> True
它也将做漂亮的东西像相对决心路径:
var dir = new DirectoryInfo(@"C:\Asdf\Qwer\Zxcv\Poiu\Lkj\..\..\..\Mn");
Console.WriteLine(dir.FullName);
//> C:\Asdf\Qwer\Mn
关于修剪和附加斜杠的其他答案,请注意Directory.GetParent(“... \”)和DirectoryInfo(“... \”)之间的行为差异。一致:
Console.WriteLine(Directory.GetParent(@"C:\Temp\Test").FullName);
//> C:\Temp
Console.WriteLine(Directory.GetParent(@"C:\Temp\Test\").FullName);
//> C:\Temp\Test
Console.WriteLine(new DirectoryInfo(@"C:\Temp\Test").Parent.FullName);
//> C:\Temp
Console.WriteLine(new DirectoryInfo(@"C:\Temp\Test\").Parent.FullName);
//> C:\Temp
同样,为了避免处理结尾的斜杠,始终使用Path.Combine()来连接路径和文件名。它会正确处理的路径是否包含一个尾随\与否:
Console.WriteLine(Path.Combine(@"C:\Temp\Test\", "Test.txt"));
//> C:\Temp\Test\Test.txt
Console.WriteLine(Path.Combine(@"C:\Temp\Test", "Test.txt"));
//> C:\Temp\Test\Test.txt
Console.WriteLine(Path.Combine(@"C:\", "Temp", "Test", "Test.txt"));
//> C:\Temp\Test\Test.txt
你的字符串是否从数据库中回来,所有的斜线加倍?或者这正是你在调试器中观察到的(这是正常的)? –
[从完整目录路径中删除一个目录]可能的重复(http://stackoverflow.com/questions/6098209/remove-one-directory-from-full-directory-path) –