【发布时间】:2010-02-02 02:22:48
【问题描述】:
我需要检查文件夹中的任何文件是否被其他应用程序打开。不幸的是,如果文件已打开,GetFileAttributesA() 会返回错误值。是否有解决方法或者我做错了什么?
【问题讨论】:
标签: winapi permissions
我需要检查文件夹中的任何文件是否被其他应用程序打开。不幸的是,如果文件已打开,GetFileAttributesA() 会返回错误值。是否有解决方法或者我做错了什么?
【问题讨论】:
标签: winapi permissions
GetFileAttributes 与文件共享无关。知道某人是否打开了文件(从而阻止您打开它)的唯一方法是尝试自己打开它。
bool IsFileOpenBySomeoneElse(LPCTSTR pszFilename)
{
HANDLE hfile = CreateFile(pszFilename,
GENERIC_READ /*| GENERIC_WRITE*/,
0, //0 is share-none
NULL,
OPEN_ALWAYS);
if (hfile != INVALID_HANDLE_VALUE)
{
CloseHandle(hfile);
return false;
}
return (GetLastError() == ERROR_SHARING_VIOLATION);
}
但是编写这个函数对你没有好处,因为当你开始打开文件进行处理时,其他一些应用程序可能已经打开了文件。
执行此操作的唯一安全方法是继续执行您打算对文件执行的操作,当您尝试打开它进行处理时,如果失败,请注意错误值。一旦你打开了文件,你必须保持它打开直到你完成或其他进程可以在你背后打开它(或删除它!)。
【讨论】: