FindFirstFile返回拒绝访问

时间:2012-05-16 18:52:26

标签: c windows winapi

我正在尝试创建一个强大的递归文件夹删除功能。

使用普通目录工作得很好。

当我创建一个“硬核”目录时会出现问题,例如:

C:\ test \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ x \ .. 。\ x \ x \ x

这个长度约为25000(小于MSDN限制:32,767)。基本上我递归地创建了这个目录,直到CreatDirectory函数失败。

现在,最奇怪的是,我的函数能够删除2个目录,然后FindFirstFile失败并显示0x5:

\\?\C:\test\x\ ... \x\x\x\*.*    < no error
\\?\C:\test\x\ ... \x\x\*.*      < no error
\\?\C:\test\x\ ... \x\*.*        < access denied

(我可以重新运行它,应用程序正在慢慢地咀嚼文件夹,2比2,可能直到路径长度变小)

我正在运行FindFirstFile来检查文件夹是否为空。

  • 是否存在较少记录的任何限制?
  • FindFirstFile只是不起作用? (车?)
  • 我错过了某种NTFS权限吗?
  • 别的......

修改: 重要说明:如果我一步一步地慢慢运行程序......那么什么都不会失败。

1 个答案:

答案 0 :(得分:8)

您可能正在经历类似病毒扫描程序,索引器或持有目录句柄的连续备份解决方案。如果索引服务配置为索引该文件夹,例如。

尝试删除除了使用FILE_SHARE_DELETE标志以外打开的文件夹或文件将导致ACCESS_DENIED。

要确认这一点,请使用Process Monitor查看与您的路径匹配的任何内容的打开和关闭。

(当然也确认你叫了FindClose)。