簡體   English   中英

MFC C ++:如何鎖定僅在過程中使用的文件?

[英]MFC C++: how can I lock a file to be used only in my process?

我想鎖定幾個只供我的進程使用的文件,在程序運行時拒絕任何其他應用程序訪問這些文件。 當然,我知道我可以使用Createfile來獨占訪問文件,但是我的應用程序工作方式不同,我從配置中讀取了一堆文件名,並使用鏈接到我的應用程序的Lib處理這些文件,即我的功能之一。 lib訪問文件,但是我沒有得到filoehandle或類似的東西作為回報。

因此,我想實現的是,當我的應用程序正在處理這些文件時,沒有其他應用程序可以修改它們。 這可能嗎? 我正在Visual Studio 8中使用MFC進行開發。

我從未使用過它們,但是LockFile/LockFileEx文檔說: 鎖定指定的文件以供調用進程進行獨占訪問。

您需要操作系統的合作,因為這是影響其他流程的唯一方法。

操作系統要求您使用句柄來引用文件。 這實際上是操作系統的唯一實用方法。 使用路徑名太復雜了。 因此,您將需要調用CreateFile 此時,只需請求獨占訪問即可。

為什么CreateFile()的獨占標志無法實現此目的? 看起來您不需要任何花哨的東西。 如果您的庫使用CFile :: shareDenyRead和CFile :: shareDenyWrite打開文件,則其他任何進程都無法讀取您的文件,只要它們由您的庫打開即可。

您的要求無法完成。

因為排他訪問是按句柄而不是按進程授予的,所以如果一次打開一個具有排他訪問權限的文件,則以后每次打開該文件的嘗試都會失敗,即使該文件來自同一進程。 這里的獨占訪問意味着您的句柄是唯一有效的句柄,而不是只有您的進程才能訪問它。

因此,即使您鎖定了文件,您的lib也將無法打開它,因此對您來說毫無用處。 唯一的方法是鎖定文件並將句柄傳遞給您的lib,您不能這樣做,因為您的lib需要文件名。 同樣,由lib打開文件后,您將無法鎖定它,因為它不會為您提供句柄。 如果您無權訪問該庫的源代碼,那么您將陷入困境。

您可以嘗試使用具有用戶權限的方法來進行操作,讓進程從其自己的用戶帳戶運行,並更改將要修改的文件的所有權,然后在完成后將其更改回去。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM