从目录枚举文件列表的基本方法

本文关键字:方法 列表 文件 枚举 | 更新日期: 2023-09-27 18:27:37

大家好,我正在使用目录和文件计数软件。。

这里,当我从C:'D:'获取或搜索文件时,它会抛出UnAuthorizedAccessException

我想枚举文件忽略无法访问的文件/目录

如何??C#Visual Studio 2008仅适用于.NET Framework 3.5。

我的代码

var files = FastDirectoryEnumerator.EnumerateFiles(path, "*.reg.zip", 
                 SearchOption.AllDirectories)
                .GroupBy(f => f.Name).Select(g => g.First());

这里是以.reg.zip 结尾的Am Taking文件

我想在我的全电脑上搜索它。。但例外。。

VS 2008默认用户。。我试用了带有的app.manifest

    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

但是即使例外。。在SystemVolumeInformation目录中搜索时。。

从目录枚举文件列表的基本方法

我首先会说这不是最好的建议。然而,这是一个起点。我的答案有两个:

首先,我认为在了解您的项目将面临的归档系统级安全问题之前,您使用FastDirectoryEnumerator进行了过早的优化。因此,如果时间允许,我会推荐一个更简单的解决方案,正如@phillip在评论中链接到的帖子中所建议的那样(获取文件时出现UnauthorizedAccessException)。对于一台远程现代机器来说,120k个文件应该不是问题。

其次,看看FastDirectoryEnumerator的速度统计数据,我可以看到使用它的吸引力。深入研究代码,我可以发现,当你像以前那样使用时,它并不能以任何方式保护你免受权限异常的影响。它本质上是封装在IEnumerable MoveNext方法中的过程代码。MoveNext方法本身对于子目录处理是递归的。

我下一步无法测试,所以你必须进行实验。如果你想破解FastDirectoryEnumerator,你可能想尝试的第一件事就是在创建新的FileData对象时使用try catch块。

public FileData Current { get { return new FileData(m_path, m_win_find_data); } }

如果这不起作用,则必须通过GetNext()方法将异常捕获到正确的位置。您可能需要为FileData实现一个NullObject模式。我希望这在某种程度上有所帮助。