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

前端之家收集整理的这篇文章主要介绍了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然后可以移动文件,但那就是它.

原文链接:https://www.f2er.com/windows/365154.html

猜你在找的Windows相关文章