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部分并parentDir2返回null。

我怎样才能做到这一点?

澄清一下:如果根目录恰好是给定文件夹中的目录 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

我遇到了类似的情况。看起来你可以打电话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 回答