2010-08-29 136 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

相關問題