2013-03-02 55 views
0

當我試圖獲取DirectoryInfo時出現錯誤,因爲有一些只讀文件和文件夾。使用GetFileSystemInfos獲取DirectoryInfo時出錯()

我怎樣才能跳過它們?

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

「我得到一個錯誤」是不夠的信息 - 什麼*確切*是錯誤? – 2013-03-02 21:28:44

+0

根據您提供的代碼,正在讀取的文件/文件夾不應該爲獲取FileSystemInfo而引發錯誤。您可能會遇到一些權限錯誤。但正如喬恩所說,沒有錯誤的細節,很難幫助你。 – publicgk 2013-03-02 21:59:09

回答

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(); 
相關問題