2011-04-13 57 views
2

我當然不是Win32 API編程方面的專家,但我剛學會的是,使用CreateFile函數,我可以標記它被操作系統刪除,一旦使用FILE_FLAG_DELETE_ON_CLOSE值釋放它的句柄。我似乎無法找到一種方法來使用CreateDirectory,或者我錯過了什麼?帶有FLAG_DELETE_ON_CLOSE的Win32 API CreateDirectory。可能?

(可選)我是否可以訂閱此特定文件夾內的更改(如創建的新文件),然後用此標誌以某種方式標記文件夾內的所有文件?

+1

沒有嘗試過,我懷疑Windows會尊重目錄上的該標誌。原因是如果目錄非空,則不能刪除該目錄。如果操作系統不知道它是否能夠做到這一點,那麼操作系統如何能夠給你一個刪除某種信息的承諾。 – Damon 2011-04-13 08:58:07

+0

如果你期望這個目錄是非空的,你必須標記其中的所有文件以便刪除(即使你在目錄上使用刪除標誌),所以FS通知是你唯一的選擇。還應該注意的是,並非所有應用程序在打開文件時都使用FILE_SHARE_DELETE,因此如果第三方應用程序寫入此目錄,您可能無法在關閉標誌上設置刪除。 – Anders 2011-04-13 17:57:19

+0

'CreateFile'不是一個方法,它是一個(非成員)函數。 「CreateDictionary」與刪除文件有什麼關係? – 2011-04-13 18:27:27

回答

3

您可以通過使用FILE_FLAG_BACKUP_SEMANTICS標誌打開的句柄目錄:

#include <windows.h> 
#include <stdio.h> 
void main() 
{ 
    CreateDirectory(".\\testdir",NULL); 
    system("pause"); 
    HANDLE hDir = CreateFile(".\\testdir",0,FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,0,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS|FILE_FLAG_DELETE_ON_CLOSE,NULL); 
    CloseHandle(hDir); 
} 

這確實我測試的機器上工作(如果該目錄是空的),但我不知道這是否是記錄爲有效的事情。