我的
Windows程序通过目录/文件接口从另一个程序接收信息.
这是其他程序将文件放入特殊目录.我的程序定期扫描目录,查找文件,进程然后删除它们.
这是其他程序将文件放入特殊目录.我的程序定期扫描目录,查找文件,进程然后删除它们.
我使用CreateFile()函数打开这样的文件.为了确保其他程序已完成写入文件并关闭它,我将dwShareMode参数设置为0.如果CreateFile因共享错误而失败,我只是跳过该文件直到下一次尝试.
问题是当我的程序打开文件时,DeleteFile()失败并出现ERROR_SHARING_VIOLATION错误.
我可以在删除它之前关闭文件,但我想避免在删除文件之前其他程序打开文件的可能性.
CreateFile(filePath,DELETE|FILE_READ_DATA,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)
在
FILE_SHARE_DELETE中传递dwShareMode.请注意,这仍然允许其他应用程序(以及您自己的应用程序)在您读取文件时调用
DeleteFile(),但根据DeleteFile()的文档,在您调用CloseHandle()关闭读取之前,它不会被删除处理.
原文链接:https://www.f2er.com/windows/365154.htmlThe DeleteFile function marks a file for deletion on close. Therefore,
the file deletion does not occur until the last handle to the file is
closed. Subsequent calls to CreateFile to open the file fail with
ERROR_ACCESS_DENIED.
只要您未分别指定FILE_SHARE_READ或FILE_SHARE_WRITE,其他应用程序将无法读取或写入文件.虽然使用FILE_SHARE_DELETE然后可以移动文件,但那就是它.