簡體   English   中英

如何獲取目錄中的所有文件以跳過未經授權的文件?

[英]How can I get all files in a directory skipping unauthorized files?

我需要獲取 C 驅動器中允許寫入讀取的所有文件的列表,所以我嘗試這樣:

string[] files = Directory.GetFiles(@"C:\\", "*.*", SearchOption.AllDirectories);
foreach (string file in files)
{
    Console.WriteLine(file);
}

但我立即得到UnauthorizedAccess異常

如果您使用的是 .NET Core 2.1 或更高版本,您應該能夠使用Directory.GetFiles(String, String, EnumerationOptions)並通過EnumerationOptions.IgnoreInaccessible

獲取或設置一個值,該值指示在拒絕訪問時是否跳過文件或目錄(例如,UnauthorizedAccessException 或 SecurityException)。

var files = Directory.GetFiles(@"C:\\", "*.*", 
    new EnumerationOptions { 
        IgnoreInaccessible = true, 
        RecurseSubdirectories = true,
});

筆記:

  • 由於您正在遞歸搜索,因此您可能還考慮切換到Directory.EnumerateFiles(String, String, EnumerationOptions)以提高性能:

    EnumerateFiles 和 GetFiles 方法的區別如下: 使用 EnumerateFiles 時,可以在返回整個集合之前開始枚舉名稱集合; 當您使用 GetFiles 時,您必須等待返回整個名稱數組,然后才能訪問該數組。 因此,當您處理許多文件和目錄時,EnumerateFiles 會更有效。

  • 在你寫的標題中,我怎樣才能讓目錄中的所有文件跳過未經授權的文件? 但是在您寫的問題中,我需要獲取 C 驅動器中允許寫入讀取的所有文件的列表

    僅僅因為Directory.GetFiles()返回了IgnoreInaccessible = true的文件,這並不意味着您可以斷定該文件實際上是可寫和可讀的。 為此,您需要查看文件的有效權限。 請參閱檢查 .NET 中的目錄和文件寫入權限 或者您可以嘗試打開文件並檢查 stream 的CanReadCanWrite屬性,請參閱 Zbigniew 的C# 文件狀態(可讀、可寫、是文件、是目錄)了解詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM