[英]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 的CanRead
和CanWrite
屬性,請參閱 Zbigniew 的C# 文件狀態(可讀、可寫、是文件、是目錄)了解詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.