在我的应用程序中,我想使用 FILE_FLAG_DELETE_ON_CLOSE 打开一个临时文件。然而,在某些情况下,临时文件需要保留并且非常大
我想删除打开的句柄上的 FILE_FLAG_DELETE_ON_CLOSE 属性?这可能吗?复制文件的内容或重命名并不是我想要的,我想删除该属性。这是由于我处理一些写入的方式,在我的应用程序中关闭句柄将使我面临竞争条件
你也可以反过来做。 首先打开文件,指定
FILE_SHARE_DELETE
。
然后,当您需要关闭文件时,请使用 FILE_DELETE_ON_CLOSE
再次打开它,然后关闭两个句柄。或者,直接关闭它,它就不会被删除。
事实上可以做你想做的事:
使用
DELETE
访问权限 (0x10000
) 打开文件,不使用 FILE_FLAG_DELETE_ON_CLOSE
。
使用信息类 SetFileInformationByHandle
(
FileDispositionInfo
) 和指向 4
结构的指针调用 FILE_DISPOSITION_INFO
,该结构的 DeleteFile
成员指示是否应删除文件。 (该结构没有其他成员。)您可以根据需要设置和重置此标志。
如果您在创建时设置
FILE_FLAG_DELETE_ON_CLOSE
,则该标志将被忽略,即使将其设置为 FALSE
也会返回成功代码。我想没有办法取消FILE_FLAG_DELETE_ON_CLOSE
。
不,一旦创建完成就不可能了。一个危险的想法可能始于这样的声明:“该标志仅与打开链接的句柄相关。”因此,创建一个新链接可能会“修复”它。我思考这个问题的时间不超过五秒钟,但这是午夜时我唯一想到的稍微聪明的事情。