C DeleteFile和FindFirstFile如何交互?

C DeleteFile和FindFirstFile如何交互?,c,winapi,C,Winapi,我有一个基本上能做到这一点的程序 while(1) FindFirstFile() if file found CreateFile() DeleteFile() 但是,有时CreateFile报告错误\u文件\u未找到,即使FindFirstFile找到了一个文件!DeleteFile是否保证文件返回后不会显示在目录列表中?您可能遇到Raymond Chen在中描述的问题 基本上,DeleteFile()是“某种”异步的-如果要删除的文件上有任何未完成的文件句柄,文件

我有一个基本上能做到这一点的程序

while(1)
  FindFirstFile()
  if file found
    CreateFile()
    DeleteFile()

但是,有时CreateFile报告错误\u文件\u未找到,即使FindFirstFile找到了一个文件!DeleteFile是否保证文件返回后不会显示在目录列表中?

您可能遇到Raymond Chen在中描述的问题


基本上,
DeleteFile()
是“某种”异步的-如果要删除的文件上有任何未完成的文件句柄,文件系统只会将该文件标记为“待删除”,但是它实际上不会从目录列表中消失,直到最后一个打开的句柄被关闭——即使
DeleteFile
返回成功。

所以您试图打开
FindFirstFile
找到的文件,但有时会失败?是的,基本上是这样。FindFirstFile似乎找到了以前应该删除的文件file:d。您确定没有其他进程/线程接触/删除有问题的文件吗?我确定没有任何线程接触该文件。然而,正如@JonathanPotter所提到的,它可能会被一个反病毒程序访问。客户(如赛门铁克)安装了“访问时反病毒搜索”功能,因此这可能确实是原因。似乎我不能指望DeleteFile删除后续文件列表中的文件,我将不得不更改我的程序来处理这个问题。