2013-09-25 54 views
5

我有一个程序,基本上这是否DeleteFile和FindFirstFile如何交互?

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

然而,有时的CreateFile报告ERROR_FILE_NOT_FOUND,即使发现用FindFirstFile文件! DeleteFile保证文件在返回后不会显示在目录列表中吗?

+0

所以你试图打开'FindFirstFile'发现的文件,并且有时会失败? –

+0

是的,基本上。它_seems_ FindFirstFile找到一个本来应该是DeleteFile的文件:d。 –

+0

您确定没有其他进程/线程触及/删除有问题的文件吗? – alk

回答

3

您可能会遇到Raymond Chen在his blog中描述的问题。

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

+0

那么作为赛门铁克的客户安装了访问时防病毒搜索功能,因此这可能确实是原因。看来我不能指望DeleteFile删除后续文件列表中的文件,而且我必须更改我的程序以应对此问题。 –