System.IO.DirectoryInfo è probabilmente il più pulito modo per realizzare ciò che stai chiedendo.
var path = "\\\\ServerName\\Documents\\MasterDocumentFolder\\";
string newPath = new DirectoryInfo(path).Parent.CreateSubdirectory("NewDocumentFolder1").FullName;
Console.WriteLine(newPath.FullName);
//> "\\ServerName\Documents\NewDocumentFolder1\"
Nota che DirectoryInfo non richiede una directory accessibile esistente o:
var dir = new DirectoryInfo(@"C:\Asdf\Qwer\Zxcv\Poiu\Lkj\Mn");
Console.WriteLine(dir.Exists);
//> False
Ma facendo attenzione che esiste è un gioco da ragazzi
var dir = new DirectoryInfo(@"C:\Asdf\Qwer\Zxcv\Poiu\Lkj\Mn");
dir.Create();
Console.WriteLine(dir.Exists);
//> True
Sarà anche fare cose eccezionali come determinazione relativa percorsi:
var dir = new DirectoryInfo(@"C:\Asdf\Qwer\Zxcv\Poiu\Lkj\..\..\..\Mn");
Console.WriteLine(dir.FullName);
//> C:\Asdf\Qwer\Mn
Per quanto riguarda le altre risposte taglio e accodamento barre, notare la differenza di comportamento tra Directory.GetParent ("... \") e DirectoryInfo ("... \"). Parent quando si tratta di trailing \ 's - DirectoryInfo è più coerente:
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
Anche in questo caso, per evitare di trattare con slash, utilizzare sempre Path.Combine() per concatenare i percorsi ei nomi dei file.Sarà gestire i percorsi in modo corretto se contengono un finale \ o no:
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
Le stringhe tornano dal database con tutte le barre raddoppiate? O è proprio quello che stai osservando nel debugger (che è normale)? –
possibile duplicato di [Rimuovere una directory dal percorso completo della directory] (http://stackoverflow.com/questions/6098209/remove-one-directory-from-full-directory-path) –