如何检查文件是否打开

时间:2010-02-02 02:22:48

标签: winapi permissions

我需要检查文件夹中的任何文件是否被其他应用程序打开。不幸的是,如果文件是打开的,GetFileAttributesA()会返回错误的值。是否有解决方法或我做错了什么?

1 个答案:

答案 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);
}   

但是编写这个函数对你没有好处,因为当你打开文件进行处理时,其他一些应用程序可能会打开文件。

执行此操作的唯一安全方法是继续执行您要对文件执行的操作,并在尝试打开它进行处理时,如果失败则请注意错误值。打开文件后,必须保持打开状态,直到完成或其他进程可以打开(或删除它!)背后。