FindFirstFile/FindNextFile 查找已使用 SHFileOperation 删除的文件夹

lur*_*ker 5 windows winapi file

我正在使用FindFirstFileFindNextFile显示应用程序中给定文件夹中的文件列表。

有时,我会看到我的应用程序使用 删除文件夹的情况SHFileOperation,但仍然可以通过FindFirstFile. 我已经在 StackOverflow 上看到了之前报告的这个问题:使用 remove 函数删除的文件仍然显示在 FindFirstFile/FindNextFile 中。但是,在我的情况下,我没有使用remove,即使清除回收站后该文件夹仍然可见。此外,该文件夹在 Windows 文件资源管理器中不可见。这让我想知道文件资源管理器正在过滤什么以忽略文件。

我试图寻找在文件属性,但只发现删除的文件夹有FILE_ATTRIBUTE_DIRECTORYFILE_ATTRIBUTE_VIRTUAL集。该FILE_ATTRIBUTE_VIRTUAL属性有点神秘(MSDN 说它是为系统使用而保留的),所以我尝试忽略设置了该属性的文件夹。但是,事实证明存在设置了此属性的合法现有/活动文件夹,因此我无法将其用作过滤器。

为什么会出现这个文件夹?如何忽略它而不忽略现有(未删除)文件夹?

9da*_*dan 0

我从MSDN页面找到了这个评论,

查找第一个文件函数

请注意,在您查询结果和对信息进行操作之间,某些其他线程或进程可能会创建或删除具有此名称的文件。如果这是您的应用程序的潜在问题,一种可能的解决方案是将 CreateFile 函数与 CREATE_NEW(如果文件存在则失败)或 OPEN_EXISTING(如果文件不存在则失败)结合使用。

它说您应该使用 CreateFile API 仔细检查文件是否确实存在。