Как извлечь каждое имя папки из пути? - PullRequest
57 голосов
/ 30 декабря 2008

Мой путь \\server\folderName1\another name\something\another folder\

Как извлечь имя каждой папки в строку, если я не знаю, сколько папок в пути и я не знаю имен папок?

Большое спасибо

Ответы [ 15 ]

0 голосов
/ 17 сентября 2016

Вот модификация ответа Вольфа, которая оставляет рут и исправляет то, что казалось парой ошибок. Я использовал его для создания панировочных сухарей, и мне не хотелось, чтобы показывался корень.

это расширение типа DirectoryInfo.

public static List<DirectoryInfo> PathParts(this DirectoryInfo source, string rootPath)
{
  if (source == null) return null;
  DirectoryInfo root = new DirectoryInfo(rootPath);
  var pathParts = new List<DirectoryInfo>();
  var di = source;

  while (di != null && di.FullName != root.FullName)
  {
    pathParts.Add(di);
    di = di.Parent;
  }

  pathParts.Reverse();
  return pathParts;
}
0 голосов
/ 31 августа 2011

Я добавляю к ответу Мэтта Брунелла.

            string[] directories = myStringWithLotsOfFolders.Split(Path.DirectorySeparatorChar);

            string previousEntry = string.Empty;
            if (null != directories)
            {
                foreach (string direc in directories)
                {
                    string newEntry = previousEntry + Path.DirectorySeparatorChar + direc;
                    if (!string.IsNullOrEmpty(newEntry))
                    {
                        if (!newEntry.Equals(Convert.ToString(Path.DirectorySeparatorChar), StringComparison.OrdinalIgnoreCase))
                        {
                            Console.WriteLine(newEntry);
                            previousEntry = newEntry;
                        }
                    }
                }
            }

Это должно дать вам:

"\ сервер"

"\ сервер \ folderName1"

"\ server \ folderName1 \ another name"

"\ server \ folderName1 \ другое имя \ что-то"

"\ server \ folderName1 \ другое имя \ что-то \ другая папка \"

(или отсортируйте полученную коллекцию по строке. Длина каждого значения.

0 голосов
/ 12 июня 2011
DirectoryInfo objDir = new DirectoryInfo(direcotryPath);
DirectoryInfo [] directoryNames =  objDir.GetDirectories("*.*", SearchOption.AllDirectories);

Это даст вам все каталоги и подкаталоги.

0 голосов
/ 06 января 2009

Я написал следующий метод, который работает для меня.

protected bool isDirectoryFound(string path, string pattern)
    {
        bool success = false;

        DirectoryInfo directories = new DirectoryInfo(@path);
        DirectoryInfo[] folderList = directories.GetDirectories();

        Regex rx = new Regex(pattern);

        foreach (DirectoryInfo di in folderList)
        {
            if (rx.IsMatch(di.Name))
            {
                success = true;
                break;
            }
        }

        return success;
    }

Строки, наиболее подходящие для вашего вопроса:

DirectoryInfo directoryies = new DirectoryInfo (@path); DirectoryInfo [] folderList = directoryies.GetDirectories ();

0 голосов
/ 30 декабря 2008

Или, если вам нужно что-то сделать с каждой папкой, взгляните на класс System.IO.DirectoryInfo. Он также имеет свойство Parent, которое позволяет вам перейти к родительскому каталогу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...