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