我想用它卸載過程中,提前向用戶發出警告。 該過程應該適用於W2000 +,因此不允許使用Vista API。如何檢查文件是否可以被刪除
這似乎趕上一些衝突:
if(GetFileAttributes(lpPath) == INVALID_FILE_ATTRIBUTES)
{
// File does not exist
}
else
{
BOOL bCanDelete = FALSE ;
HANDLE hFile = CreateFile(path,
GENERIC_WRITE /*|DELETE*/,
0 /*FILE_SHARE_DELETE*/,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if(hFile != INVALID_HANDLE_VALUE)
{
DWORD size = 10000 ; // a number > file size allowed
if(size != INVALID_FILE_SIZE)
{
if(LockFile(hFile, 0,0, size,0))
{
UnlockFile(hFile, 0,0, size,0) ;
bCanDelete = TRUE ;
}
}
CloseHandle(hFile) ;
}
}
即檢測到這些情況: 一)刪除運行exe文件 b)去除打開PDF
使用GENERIC_WRITE | DELETE似乎同樣的行爲。 單獨使用DELETE適用於情況b),但不適用於a)。
我沒有確鑿證據證明與LockFile()捕獲任何有意義的衝突,但假設它。
是否有人有更好的主意嗎?
謝謝,但這個過程不能因爲兩個原因中: - 這是一個破壞性操作。 - 它不起作用。例如,一個正在運行的exe可以重命名,但不能被刪除。 (與打開的PDF不能重命名不同。) – 2009-11-16 12:34:39