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);
}
Но написание этой функции бесполезно, потому что к тому времени, когда вы приступаете к открытию файла для обработки, у какого-то другого приложения этот файл может открыться.
Единственный безопасный способ сделать это - сделать то, что вы собираетесь делать с файлом, и когда вы попытаетесь открыть его для обработки, обратите внимание на значение ошибки, если вы потерпите неудачу. После того, как файл открыт, вы должны держать его открытым, пока не закончите или другой процесс не сможет открыть (или удалить!) За вашей спиной.