我想用它卸载过程中,提前向用户发出警告。 该过程应该适用于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