Код прост и проверен временем, надежный как швейцарские часики Зачем и для чего это обьяснять не буду, кому надо тот поймет, для использования в своих образовательных целях
А зачем так всё усложнять, если банально можно просто получить список всех директорий на всех дисках, условно так 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, У тебя Directory.GetDirectories с SearchOption.AllDirectories сразу выдаёт все папки на диске, так он когда будет проходить какую-нибудь системную папку, попробует получить все, что внутри - сдохнет