2011-09-26 19 views
0

我想鎖定幾個文件,僅供我的進程使用,否則在程序運行時拒絕任何其他應用程序訪問這些文件。當然,我知道我可以使用Createfile獨佔訪問文件,但是我的應用程序工作方式不同,我從配置文件讀取了一堆文件名,並使用鏈接到我的應用程序的Lib處理這些文件,即我的一個函數lib訪問文件,但我沒有得到filoehandle或類似的東西。MFC C++:我如何鎖定一個文件僅用於我的進程?

所以我想acchieve是,雖然我的應用程序正在處理這些文件,沒有其他應用程序可以修改它們。這是否有可能?我正在開發在Visual Studio 8中使用MFC。

+0

你如何告訴你的lib什麼文件來處理?你傳遞文件名? – MikMik

+0

你的lib是否修改這些文件?或者只是需要從中讀取,而您在閱讀時不需要更改? – Ferruccio

回答

2

我從來沒有使用它們,但LockFile/LockFileEx文檔說:鎖定指定的文件,以便調用進程獨佔訪問。

+0

鎖定區域,並需要一個句柄。 – MSalters

1

你需要從操作系統的合作,因爲這是影響其他進程的唯一途徑。

操作系統要求使用句柄來引用文件。這真的是操作系統唯一實用的方式;使用路徑名太複雜了。所以,你需要撥打CreateFile。此時,請求獨佔訪問。

1

爲什麼好好嘗試一下的的CreateFile()的專屬標誌實現這一目標?看起來你不需要任何幻想。如果你的庫用CFile :: shareDenyRead和CFile :: shareDenyWrite打開這個文件,只要它們被你的庫打開,沒有其他進程可以讀你的文件。

+0

'我的lib訪問文件,但我沒有得到filoehandle'他不能修改那個標誌。 –

1

你在問什麼不能做。

因爲獨佔訪問每個手柄理所當然的,而不是每個過程中,如果你打開以獨佔訪問文件一次,以後每嘗試打開它會失敗,即使是從同一個過程。這裏的獨佔訪問意味着您的句柄是唯一有效的句柄,而不是隻有您的流程才能訪問它。

所以,即使你鎖定的文件,你的LIB將無法打開它,所以它是無用的給你。唯一的辦法是鎖定一個文件並把句柄傳遞給你的lib,這是你不能做的,因爲你的lib想要一個文件名。同樣,只要文件被lib打開,就不能鎖定文件,因爲它不會給你提供句柄。如果您無法訪問lib的源代碼,那麼您就被卡住了。

您可能會嘗試用戶權限,讓您從自己的用戶帳戶運行進程並更改您要修改的文件的所有權,然後在完成後將其更改回來。

相關問題