Вы получаете исключение, потому что вызывающая учетная запись не имеет прав доступа к папкам, таким как System Volume Information
. Вы можете обойти это некоторые , используя Linq и пропуская папки, помеченные System
или Hidden
.
DirectoryInfo root = new DirectoryInfo(@"C:\");
Func<FileSystemInfo, Boolean> predicate = dir =>
(dir.Attributes & FileAttributes.System) != FileAttributes.System &&
(dir.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden;
IEnumerable<FileSystemInfo> directories = root.GetDirectories().Where(predicate);
foreach (DirectoryInfo directory in directories) {
try {
Trace.WriteLine(directory.Name);
DirectoryInfo[] subdirectories = directory.GetDirectories();
}
catch (System.UnauthorizedAccessException) {
Trace.WriteLine("Insufficient access rights.");
}
}
Trace.WriteLine("End of application.");
Хотя это не решение для каждого сценария, и не будет работать для некоторых файлов и папок. Нет простого решения с использованием существующего API; вместо этого вы можете захотеть получить информацию о файлах и каталогах через WMI.