Подтвердить что ты не робот

Получить родительский каталог родительского каталога

У меня есть строка, относящаяся к местоположению в сети, и мне нужно получить каталог, который находится на расстоянии 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 из данной папки, это то, что мне нужно вернуть

4b9b3361

Ответ 1

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]; 
}

Это то, что я искал. Извинения за любую путаницу, вызванную!

Ответ 2

Вы можете использовать класс System.IO.DirectoryInfo:

DirectoryInfo networkDir=new DirectoryInfo(@"\\Path\here\now\username");
DirectoryInfo twoLevelsUp=networkDir.Parent.Parent;

Ответ 3

Я столкнулся с подобной ситуацией. Похоже, вы могли бы просто позвонить GetDirectoryName дважды!

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

Viola!

Ответ 4

Вы можете попробовать это (я использую его в своих командных строках/пакетных файлах все время).

string twolevelsup = Path.Combine("\\\\networkLocation\\staff\\users\\username", "..\\..\\");