Выполнить итерацию по корневому каталогу и получить все файлы в нем?

#c# #asp.net

#c# #asp.net

Вопрос:

привет, я создаю приложение, и я хочу знать каждый файл, который присутствует в этой папке. т. Е. как я могу выполнить итерацию по корневому каталогу и получить список посещений каждого файла в списке один раз.

Ответ №1:

Если вам просто нужно перечислить их все сразу, вы можете просто использовать перегрузку для GetFiles, которая включает опцию.

 string[] filePaths = Directory.GetFiles(@"c:MyDir", "*.*", SearchOption.AllDirectories);
  

Очевидно, что в веб-приложении у вас вряд ли был бы доступ к «c:MyDir «, то есть вы можете заменить это переменной, содержащей результаты вызова MapPath, вот так:

 var rootDir = Server.MapPath("~/App_Data");
  

Ответ №2:

Используйте каталог.EnumerateFiles(строка, String, SearchOption) функционирует с SearchOption.AllDirectories :

 foreach (var file in Directory.EnumerateFiles(@"c:", "*.txt", SearchOption.AllDirectories))
{
    // Do stuff here
}
  

Метод EnumerateFiles намного быстрее, чем метод GetFiles, поскольку он фактически просто возвращает перечислитель и фактически не обращается к файлам, пока они не станут красными.

Комментарии:

1. Возможно, в фреймворке было бы что-то, что сделало бы это за вас. Однако это возвращает только полный путь. Потребовалась бы дополнительная работа, если бы вы хотели получить объект, представляющий свойства файла.

Ответ №3:

Вы можете использовать классы DirectoryInfo и FileInfo, а также рекурсивную функцию.

 void Main()
{
    DirectoryInfo info = new DirectoryInfo(@"C:Personal");
    ListContents(info);
}

public void ListContents(DirectoryInfo info)
{
    foreach(var dir in info.GetDirectories())
    {
        ListContents(dir);
    }
    foreach(var file in info.GetFiles())
    {
        Console.WriteLine(file.FullName);
    }
}