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( "... \")。Parentの動作の違いに注意してください。末尾の\'sを処理する場合の親-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