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

时间:2013-08-13 19:39:08

标签: c# visual-studio-2008 unauthorizedaccessexcepti

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

此处,当我从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

结尾的文件

我想在我的整台计算机上搜索..但是例外..

VS 2008默认用户..我用

尝试了app.manifest
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

但即使Exception ..在SystemVolumeInformation目录中搜索..

1 个答案:

答案 0 :(得分:0)

我首先要说这不是最好的建议。但是,这是一个开始的地方。 我的答案有两个:

首先,我认为您在了解项目所面临的文件系统级安全问题之前使用FastDirectoryEnumerator进行了过早优化。因此,如果时间允许,我会建议在评论(UnauthorizedAccessException while getting files)中链接到@phillip的帖子中推荐一个更简单的解决方案。对于远程现代机器,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模式。 我希望在某种程度上有所帮助。