Не производится поиск файлов по всем дискам

102
02 марта 2021, 13:40

Имеется метод которые получает все диски

public static string GetAllDrives()
{
   var builder = new StringBuilder();
   try
   {
       DriveInfo[] allDrives = DriveInfo.GetDrives();
       foreach (DriveInfo d in allDrives)
       {
          builder.AppendLine(d.Name);
       }
   }
   catch (Exception) { }
   return builder.ToString();
}

На выходе получаю: C:\ D:\ E:\ и.т.д диски

По ним я хочу пройтись и искать все файлы которые имеются там для этого я попробовал сделать такой метод поиска:

public static void SearchAllDisk()
{
   try
   {
     foreach (string list in Directory.EnumerateFiles(GetAllDrives(), "*", SearchOption.AllDirectories))
     {
        Console.WriteLine(list);
     }
   }
   catch (Exception) { }
}

Но после запуска ничего не происходит, я пробовал добавить список в List<string>но и там тоже ничего не получилось, подскажите как через полученные диски пройтись по всем файлам в папках и подпапках?

Answer 1

Ваша функция GetAllDrives() возвращает строку, в которой через \r\n перечислены все диски (что то типа C:\\\r\nD:\\\r\nE:\\\r\n). И вы эту строку передаете в EnumerateFiles. Следовательно сначала вам нужно разделить эту строку на диски:

public static void SearchDirectory(string dir)
{
    try
    {
         foreach (string f in Directory.GetFiles(dir))
         {
             Console.WriteLine(Path.GetFullPath(f));
         }
         foreach (string d in Directory.GetDirectories(dir))
         {
             Console.WriteLine(Path.GetFileName(d));
             SearchDirectory(d);
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
     }
}
public static void SearchAllDisk()
{
    try
    {
        string[] separators = new string[] { "\r\n" };
        string[] drives = GetAllDrives().Split(separators, StringSplitOptions.None);
        foreach (string drive in drives)
        {
            SearchDirectory(drive);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

Так же имейте в виду, что вы можете словить исключение при перечислении файлов одно диска (например, у вас недостаточно прав для просмтора этого файла) и тогда остальные диски не будут проверены. Поэтому лучше try-catch вынести внутри цикла.

READ ALSO
Почему не выводит текст в консоль? [дубликат]

Почему не выводит текст в консоль? [дубликат]

Потому что программа успевает завершиться пока задача спит

107
Парсинг картинок и заголовков в форму

Парсинг картинок и заголовков в форму

Взялся изучать С#, хочу сделать парсер с помощью AngleSharp

94
Парсинг json по ссылке с Bitfinex unity

Парсинг json по ссылке с Bitfinex unity

Нужна ваша помощьМне необходимо передать в unity 2d массив доступный по ссылке: https://api

86
Получение всех цветов в список C#

Получение всех цветов в список C#

Делаю игру, и столкнулся с проблемойЯ использую Colorful

90