2013-03-02 1 views
0

Я получаю сообщение об ошибке, когда пытаюсь получить DirectoryInfo, потому что есть только файлы и папки для чтения.Ошибка при получении DirectoryInfo с GetFileSystemInfos()

Как я могу пропустить их?

var dirinfo = new DirectoryInfo(Path_Tb_Path.Text); 
var entries = dirinfo.GetFileSystemInfos("**", SearchOption.AllDirectories); 
+4

«Я получаю сообщение об ошибке» недостаточно информации - что * точно * была ошибкой? –

+0

Основанный на коде, который вы предоставили, файл/папка, которая только для чтения, не должна вызывать ошибку для получения 'FileSystemInfo'. Возможно, вы столкнулись с некоторой ошибкой разрешения. Но, как заметил Джон, без подробностей об ошибках, вам сложно помочь. – publicgk

ответ

1

В .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(); 

 Смежные вопросы

  • Нет связанных вопросов^_^