c - FindFirstFile 返回拒绝访问

标签 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\.. .\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 x 2,可能直到路径长度变得非常小)

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

  • 是否存在任何记录较少的限制?
  • FindFirstFile 根本不起作用? ( buggy ?)
  • 我是否缺少某种 NTFS 许可?
  • 还有一些事情......

编辑: 重要说明:如果我逐步缓慢地运行程序......那么什么都不会失败。

最佳答案

您可能遇到了诸如病毒扫描程序、索引器或持续备份解决方案之类的东西,它持有目录的句柄。例如,如果索引服务配置为索引该文件夹。

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

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

(当然还要确认你调用了FindClose)。

关于c - FindFirstFile 返回拒绝访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10624817/

相关文章:

无法理解嵌套三元运算符

c - 第二个 for 循环出现错误,导致程序进入无限循环。有人可以帮助我或指出我的错误吗?

windows - 为什么在 Windows 上使用 CMake 进行构建时会出现重复的符号链接(symbolic link)器错误?

windows - WIN32 : Yielding execution to another (given) thread

c# - 将 uint 从 c 移植到 c#

从点计算三角形的长度和周长

database - Oracle ODBC 默认数据库

c++ - 更新 visual studio 2017,现在出现编译错误 C7510 : 'Callback' : use of dependent template name must be prefixed with 'template'

windows - 如何获取弹出菜单的所有者窗口

c++ - Ole 拖放故障排除