我需要检查文件夹中的任何文件是否被其他应用程序打开。不幸的是,如果文件是打开的,GetFileAttributesA()会返回错误的值。是否有解决方法或我做错了什么?
答案 0 :(得分:1)
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);
}
但是编写这个函数对你没有好处,因为当你打开文件进行处理时,其他一些应用程序可能会打开文件。
执行此操作的唯一安全方法是继续执行您要对文件执行的操作,并在尝试打开它进行处理时,如果失败则请注意错误值。打开文件后,必须保持打开状态,直到完成或其他进程可以打开(或删除它!)背后。