Код прост и проверен временем, надежный как швейцарские часики Зачем и для чего это обьяснять не буду, кому надо тот поймет, для использования в своих образовательных целях
А зачем так всё усложнять, если банально можно просто получить список всех директорий на всех дисках, условно так 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); } 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, требую объяснений
mikuzeboka, всм, ну будет системная папка, ну выбьет исключение, пропустит и пойдет дальше яж написал про try catch
wDude, Для этого тебе нужно писать отдельный метод под получение файлов из папок, а не использовать системный. В итоге у тебя остаётся из твоего кода 2 строки и ещё 10 новых, вот и всё переписал получается
mikuzeboka, мне кажется мы немного о разном говорим. Если в этот цикл добавить простой дрoп файла вместо добавления пути в массив, то исключение будет выбиваться на системных папках если нет прав, в чем нам поможет try catch, чтобы избежать казузса. То есть нам не нужно проверять файлы в папке на атрибуты, нам просто выбьет исключение при ****ее из которого мы делаем выводы