Загрузка...

****пер файла по всем папкам

Тема в разделе C# создана пользователем Farly 4 май 2022. (поднята 4 май 2022) 426 просмотров

  1. Farly
    Farly Автор темы 4 май 2022 اللعنة عليك 177 5 июн 2020
    [IMG]
    Код прост и проверен временем, надежный как швейцарские часики
    Зачем и для чего это обьяснять не буду, кому надо тот поймет, для использования в своих образовательных целях
    :smile_detective:

     
    4 май 2022 Изменено
  2. JanitorHvhboom
    JanitorHvhboom 4 май 2022 хочу работать. 32 4 апр 2018
    Бро скинь под хайд, очень интересно.
     
  3. wDude
    wDude 4 май 2022 Боюсь быть не там и не тем. 3666 14 авг 2017
    А зачем так всё усложнять, если банально можно просто получить список всех директорий на всех дисках, условно так
    C#
    List<string> AllDirectories = new List<string>();
    foreach (var Drive in DriveInfo.GetDrives())
    {
    foreach (string dir in Directory.GetDirectories(Drive.Name(), "*", SearchOption.AllDirectories))
    AllDirectorys.Add(Directory);
    }
    Это без всякого упрощения с использованием Linq и тп, а после просто пройтись по каждой директории в аналогичном цикле с try { } catch { }, внутри которого просто добавить создание/дpоп нужного файла.
    По итогу файл будет создан во всех директориях + если нет прав на директорию, то всё будет ок (пропустит папку) и он продолжит создавать.

    Я не понимаю, зачем столько наворотов с WinApi, требую объяснений :interesting:
     
    4 май 2022 Изменено
    1. Посмотреть предыдущие комментарии (8)
    2. wDude
      mikuzeboka, все, кажется понял про что речь, ты прав кстати, но я проверю позднее.
    3. wDude
      mikuzeboka, проверил, да, ты абсолютно прав, но даже если сделать рекурсивный обход отдельно - это явно выйдет меньше, чем то, что написано в самой теме.
    4. mikuzeboka
      wDude, вот метод с рекурсией. 12 строк
      Код
      private List<string> GetCommonEntriesOnFolder(string path)
      {
      List<string> entries = new List<string>();
      try
      {
      if(path.Count(z => z == '\\') > 1 && FileAttributes.System == (File.GetAttributes(path) & FileAttributes.System))
      return entries;
      entries = Directory.GetFiles(path).ToList();
      Directory.GetDirectories(path).ToList().ForEach(z => entries.AddRange(GetCommonEntriesOnFolder(z)));
      } catch { }
      return entries;
      }
Top
Загрузка...