繁体   English   中英

使用LINQ在驱动器中枚举文件以跳过回收站

[英]EnumerateFiles in drive using LINQ to skip Recycle Bin

我正在编写一个小方法来检索给定输入字符串和给定驱动器的所有完整文件名。 我的方法如下:

private IEnumerable<string> FindOccurences(string searchQuery, DriveInfo drive)
{
    return drive.RootDirectory
        .EnumerateFiles("*" + searchQuery + "*", SearchOption.AllDirectories)
        .Where(file => !file.FullName.Contains("RECYCLE"))
        .Select(file => file.FullName);
}

虽然在没有回收站的驱动器上一切正常,但在枚举文件和回收站时,我的C:\\D:\\ Directory会raise UnauthorisedAccessException 本主题中解释并使用了同样的问题,但不使用LINQ来解决它。

我希望有一个解决方案,使用LINQ跳过回收站并转移到其他目录。 这可能吗? 正如您所看到的,我已经尝试过检查名称的方式,但这并没有解决我的问题。

(如何)我可以使用LINQ跳过回收站?

编辑:我实际上在我的C:\\目录(OS目录)中发现了一个问题:C:\\ $ Recycle.Bin

我怕你不能。

GetFiles不同, EnumerateFiles不会在内存中加载整个结果列表:您可以在搜索结束前枚举结果。

但是,在返回该特定目录的任何结果之前,它总是会询问当前正在搜索的目录的权限。 这意味着它将Where检查Where子句之前抛出异常。

作为旁注,不仅Recycle Bin会抛出异常, 而且运行进程的用户无权访问所有其他目录

您应该找到分别枚举文件和目录的解决方案(使用try / catch)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM