如何跳过未经授权的文件获取目录中的所有文件?

c#

我需要获取 C 驱动器中允许写入读取的所有文件的列表,所以我尝试如下:

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

但我立即得到UnauthorizedAccess Exception

回答

如果您使用 .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()with返回IgnoreInaccessible = true,并不意味着您可以断定该文件实际上是可写和可读的。为此,您需要查看文件的有效权限。请参阅检查 .NET 中的目录和文件写入权限。或者你可以只尝试打开该文件,并检查CanReadCanWrite流的属性,请参阅C#文件状态(可读,可写的,是文件,是目录)由兹比格涅夫了解详情。


以上是如何跳过未经授权的文件获取目录中的所有文件?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>