加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 04:05:57 所属栏目:Windows 来源:网络整理
导读:我的 Windows程序通过目录/文件接口从另一个程序接收信息. 这是其他程序将文件放入特殊目录.我的程序定期扫描目录,查找文件,进程然后删除它们. 我使用CreateFile()函数打开这样的文件.为了确保其他程序已完成写入文件并关闭它,我将dwShareMode参数设置为0.如
我的 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然后可以移动文件,但那就是它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读