windows – 删除在同一进程中为独占访问而打开的文件

我的 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()关闭读取之前,它不会被删除处理.

The 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然后可以移动文件,但那就是它.

相关文章

Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...
Windows文件操作基础代码 Windows下对文件进行操作使用的一段...
Winpcap基础代码 使用Winpcap进行网络数据的截获和发送都需要...
使用vbs脚本进行批量编码转换 最近需要使用SourceInsight查看...