2010-08-29 131 views
3

在我的应用程序我想用FILE_FLAG_DELETE_ON_CLOSE打开一个临时文件。但有些情况下需要保留临时文件并且相当大有没有办法删除FILE_FLAG_DELETE_ON_CLOSE?

我想要在打开的句柄上删除FILE_FLAG_DELETE_ON_CLOSE属性?这可能吗?复制文件的内容或重命名不是我想要的,我想删除该属性。这是由于我如何处理一些写操作,在我的应用程序中关闭句柄会使我处于竞争状态

回答

2

不,一旦完成创建,就不可能。一个危险的想法可能从这个声明开始,“该标志只与链接打开的句柄相关。”因此创建一个新的链接可能会“修复”它。我还没有想过这五秒钟以上,但这是午夜时分我唯一的一件聪明的事情。

+0

这不起作用。文档不会对删除顺序进行任何限制 - 仅仅是文件的所有句柄都必须用FILE_SHARE_DELETE打开。 – 2010-08-30 11:49:33

+0

为了澄清,我的观点是创建一个新的链接,让旧的链接死掉会保留文件。但那很奇怪,并且释放了原来的名字。你的建议是在所有的时候只使用两个手柄更好,但这应该起作用。 (DELETE_ON_CLOSE不会删除一个文件,而是一个链接。) – jrtipton 2010-08-31 15:13:42

4

你可以反过来做。 首先打开文件,指定FILE_SHARE_DELETE。 然后,当您需要关闭文件时,请使用FILE_DELETE_ON_CLOSE再次打开它,然后关闭两个手柄。或者,关闭它,它不会被删除。

+0

这比我所说的更聪明(尽管仍然无法在每个句柄的基础上进行更改)。你只需要确定你可以容忍FILE_SHARE_DELETE。 – jrtipton 2010-08-29 23:08:25

相关问题