はおそらく最もきれいですあなたが求めていることを達成する方法。
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
データベースから文字列が戻ってきて、すべてのスラッシュが2倍になっていますか?それとも、デバッガで観測していることです(これは正常です)。 –
[完全なディレクトリパスから1つのディレクトリを削除]の可能性のある複製(http://stackoverflow.com/questions/6098209/remove-one-directory-from-full-directory-path) –