鑑於我有一個所有進程的所有文件句柄的列表,我怎麼才能找出哪些句柄實際上鎖定了一個文件?檢查文件是否被進程文件句柄鎖定
從我的理解我可以簡單地嘗試打開文件,並嘗試獲得所有的權限,如果出現錯誤,我會知道它被鎖定。但這聽起來效率很低。我的意思是我已經有句柄是沒有辦法檢查手柄有哪些權限?
最好我希望看到一個適用於Windows XP及更高版本的解決方案。
我已經搜遍了GetFileInformationByHandleEx函數,但是我找不到任何有關訪問權限的信息。 :/
編輯: 我不需要關於文件鎖定的實時信息。我計劃處理的文件將被鎖定,直到某些應用程序關閉或根本沒有被鎖定。
更好地請求寬恕權限 –
您可以通過嘗試寫入句柄來讀取文件的「鎖定」,因爲讀取/寫入只有句柄的所有者。 – Joel
沒有辦法做到這一點。任何類型的IsFileLocked()函數都無法在多任務操作系統上可靠地工作。它返回的值立即失效,並且不保證當您嘗試訪問該文件時它仍處於解鎖狀態。你通過訪問該文件發現,這是原子。這不是低效率的,只有你在鎖定時做的事情可能是。如果假設的IsFileLocked()函數返回TRUE,那麼你會做同樣的事情。通過防止另一個進程在打開文件時鎖定文件來避免這一切。 –