В .NET 4.0 вы можете использовать метод EnumerateFileSystemInfos
. Например, вы могли бы написать следующий рекурсивный метод, который поглотит UnauthorizedAccessException
для некоторых файлов и включать только те файлы, в результате, для которого у вас есть разрешение на доступ:
public static IEnumerable<FileSystemInfo> SafeGetFileSystemInfosRecursive(DirectoryInfo directory, string searchPattern)
{
try
{
return directory
.EnumerateFileSystemInfos(searchPattern)
.Concat(
directory
.EnumerateDirectories()
.SelectMany(x => SafeGetFileSystemInfosRecursive(x, searchPattern))
);
}
catch (UnauthorizedAccessException)
{
return Enumerable.Empty<FileSystemInfo>();
}
}
, а затем вызвать метод так:
var dirInfo = new DirectoryInfo(Path_Tb_Path.Text);
FileSystemInfo[] entries = SafeGetFileSystemInfosRecursive(dirInfo, "**").ToArray();
«Я получаю сообщение об ошибке» недостаточно информации - что * точно * была ошибкой? –
Основанный на коде, который вы предоставили, файл/папка, которая только для чтения, не должна вызывать ошибку для получения 'FileSystemInfo'. Возможно, вы столкнулись с некоторой ошибкой разрешения. Но, как заметил Джон, без подробностей об ошибках, вам сложно помочь. – publicgk