gpt4 book ai didi

c# - EnumerateFiles in drive 使用 LINQ 跳过回收站

转载 作者:行者123 更新时间:2023-11-30 12:59:40 27 4
gpt4 key购买 nike

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

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:\ 目录引发 UnauthorisedAccessException 时枚举文件并进入回收站。 this topic 中解释并使用了同样的问题。 , 但不使用 LINQ 来解决它。

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

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

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

最佳答案

恐怕你不能。

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

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

作为旁注,不仅回收站会抛出异常,而且运行您进程的用户无权访问的所有其他目录。。 p>

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

关于c# - EnumerateFiles in drive 使用 LINQ 跳过回收站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24325803/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com