c++ - 我如何监控文件上的锁以查看它何时被释放? [C++]

标签 c++ winapi file

我正在寻找一种在 unmanaged c++ 中创建程序的方法,该程序等待文件解锁(因为它不再被使用)然后执行某些操作。我没有找到如何执行此操作的运气,我们将不胜感激!

更新:我可能已经回答了我自己的问题,请参阅下文并告诉我您的想法..

更新:真正重要的是文件是可写的,它是否仍在使用并不重要。

最佳答案

这样的事情会等待而不会浪费 cpu 周期。

HANDLE h = FindFirstChangeNotification("C:\Path to folder holding file", FALSE, FILE_NOTIFY_CHANGE_LAST_WRITE);

while(true)
{
    if (CheckLockFile("C:\Path to file"))
    {
        // Do something
        break;
    }

    WaitForSingleObject(h, APPROPRIATE_TIMEOUT_VALUE);
    FindNextChangeNotification(h);
}

bool CheckLockFile(char* FilePath)
{
    HANDLE fh = CreateFile(FilePath, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL);
    if (fh == INVALID_HANDLE_VALUE)
    {
        return false; 
    }
    CloseHandle(fh);

    return true;
}

这假定锁定文件的应用程序已打开文件进行写入。

关于c++ - 我如何监控文件上的锁以查看它何时被释放? [C++],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/879530/

相关文章:

c++ - 使用 C++ 将一个字符串替换为另一个字符串

c++ - 如何散列 QVariant?

c++ - 同步线程 - InterlockedExchange

ajax - JQuery Ajax 文件上传大文件失败

C++ 在另一个类中实例化一组具有相同构造函数的类中的类类型变量

c - 单击后如何删除文本?

c++ - 带有虚拟 COM 端口的 USB 串行设备 - 如果将 CreateFile() 与 USB 路径一起使用,ReadFile() 读取零字节

java - GetParts() 在 servlet 中返回 null

java - 在java中上传和读取text/csv文件

c++ - 双向链表类