2010-08-05 50 views
1

我希望能夠在Win32中鎖定一個文件,以便它只能被當前進程使用。最明顯的方法來實現這一目標似乎是通過CreateFile鎖定文件但允許當前進程使用?

HANDLE file = ::CreateFile("c:\\foo.txt", 
          GENERIC_READ | GENERIC_WRITE, 
          0, 
          NULL, 
          OPEN_EXISTING, 
          FILE_ATTRIBUTE_NORMAL, 
          NULL); 

但是一旦調用成功,該文件也顯然是我自己的過程,即鎖定。一旦MFC框架的東西試圖打開它,我會收到「共享衝突」。

有沒有一種方便的方法來阻止其他進程訪問文件,但仍然允許我的?我寧願不必更換所有的加載/保存框架代碼...我在我傳遞給CreateFile的參數中做錯了什麼?

回答

1

我不知道有任何簡單的方法來做到這一點。就更復雜的方法而言,您可以:

  1. 設置用於訪問文件的特殊用戶名。
  2. 打開非共享文件。
  3. 編輯ACL以允許僅使用特殊用戶名
  4. 關閉文件。
  5. 模擬該用戶
  6. 打開文件,允許共享
  7. 關閉文件
  8. 設置ACL回允許其他用戶訪問

請注意,我不是說我會建議這完全是醜陋的,或多或少地是對系統的濫用 - 但是如果你確定你需要這樣做,那麼這可能是一種可行的方法。

相關問題