18

ネットワーク上の場所に関連する文字列があり、この場所から 2 番目のディレクトリを取得する必要があります。

文字列の形式は次のとおりです。

string networkDir = "\\\\networkLocation\\staff\\users\\username";

その場合、staffフォルダーが必要になり、次のロジックを使用できます。

string parentDir1 = Path.GetDirectoryName(networkDir);
string parentDir2 = Path.GetPathRoot(Path.GetDirectoryName(networkDir));

ただし、文字列が次の形式の場合:

string networkDir = "\\\\networkLocation\\users\\username";

networkLocationその部分だけが必要で、parentDir2null を返します。

これどうやってするの?

明確にするために:ルートがたまたま指定されたフォルダーから2つ上のディレクトリである場合、これは私が返す必要があるものです

4

4 に答える 4

24

System.IO.DirectoryInfo クラスを使用できます。

DirectoryInfo networkDir=new DirectoryInfo(@"\\Path\here\now\username");
DirectoryInfo twoLevelsUp=networkDir.Parent.Parent;
于 2012-07-18T13:14:15.257 に答える
9
DirectoryInfo d = new DirectoryInfo("\\\\networkLocation\\test\\test");
if (d.Parent.Parent != null) 
{ 
    string up2 = d.Parent.Parent.ToString(); 
}
else 
{ 
    string up2 = d.Root.ToString().Split(Path.DirectorySeparatorChar)[2]; 
}

私が探していたものです。混乱を招きましたことをお詫び申し上げます。

于 2012-07-18T13:56:28.397 に答える
3

私は同様の状況に遭遇しました。2回電話できるようですGetDirectoryName

var root = Path.GetDirectoryName( Path.GetDirectoryName( path ) );

ビオラ!

于 2013-11-08T22:01:53.450 に答える
0

これを試すことができます(コマンドライン/バッチファイルで常に使用しています)。

string twolevelsup = Path.Combine("\\\\networkLocation\\staff\\users\\username", "..\\..\\"); 
于 2012-07-18T18:47:30.440 に答える