2015-12-16 4 views
-2

Как я могу получить все каталоги (с подкаталогами) на жестком диске с помощью C#?Как получить все каталоги на жестком диске (C#)?

Пример ответа:

C:\ 
C:\1 
C:\2 
C:\2\1 
C:\2\1\4 
C:\2\1\4\5 
C:\2\1\4\5\6 
C:\3 
+3

Возможно, вы уже что-то предприняли? –

+1

[Практическое руководство. Итерация через дерево каталогов (руководство по программированию на C#)] (https://msdn.microsoft.com/en-us/library/bb513869.aspx?f=255&MSPPError=-2147217396). –

+0

Я новичок в C#. Я попытался сделать это, но безуспешно. –

ответ

2
using System.IO; 

var directories = new List<string>(Directory.GetDirectories(@"c:\", "*", SearchOption.AllDirectories)); 

directories.ForEach(directory => Console.WriteLine(directory)); 
+0

спасибо, Justin –

0

ответ Джастина будет 100% работать. В случае, если это больше связано с изучением техники, чем с получением результата, вам понадобится рекурсивная функция. Все это означает, что нам нужна функция, которая будет называть себя результатами, которые она возвращает.

public static void GetDirectories(string path, bool recursive) 
{ 
    Console.WriteLine(path); // write the name of the current directory 
    if (recursive) // if we want to get subdirectories 
    { 
     try // getting directories will throw an error if it is a path you don't have access to 
     { 
      foreach (var child in Directory.GetDirectories(path)) // get all the subdirectories for the given path 
      { 
       GetDirectories(child, recursive); // call our function for each sub directory 
      } 
     } 
     catch (UnauthorizedAccessException ex) // handle unauthorized access errors 
     { 
      Console.WriteLine(string.Format("You don't have permission to view subdirectories of {0}",path)); 
     } 

    } 
} 

А потом называть его:

static void Main(string[] args) 
{ 
    GetDirectories("c:\\", true); 
    Console.ReadLine(); 
} 

Опять же, если вы просто пытаетесь получить список пойти с ответом Джастина, но это, как вы могли бы сделать это по своему усмотрению.

Смежные вопросы