2015-07-01 45 views
1

如果我用下面的代碼打開一個文件:如何打開一個文件並將其鎖定在C?

FILE *file = fopen("D:\\1.mp4", "rb"); 

這不會鎖定文件,因此,例如,我可以使用記事本打開該文件,並寫入了!

那麼有沒有一種方法可以確保沒有其他應用程序被允許寫入這個文件,或者我應該使用WinAPI來完成這個?

+0

您是在尋找[tag:winapi]解決方案還是[tag:c]解決方案? – Amit

+0

@Amit我正在尋找一個C解決方案,但如果沒有,那麼我將使用WinAPI。 – James

回答

3

在C中,顯然沒有辦法做到這一點,雖然POSIX有辦法做到這一點。有關詳細信息,請參閱here

在WINAPI,這是相當簡單的用CreateFile做(但你最終有一個Windows句柄,而不是一個FILE指針):

HANDLE hFile = CreateFile("D:\\1.mp4", GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); 
+0

函數參數不應該是這樣的:'HANDLE hFile = CreateFile(「D:\\ 1.mp4」,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);'? – James

+0

Yup ...更正 – Amit

+2

請注意,您可以使用'_open_osfhandle'然後使用'_fdopen'從'HANDLE'中獲得'FILE *'。 –

4

的窗口功能,您要使用的是「共享模式。 「您可以使用_fsopen函數進行設置。要拒絕寫入訪問,請使用_SH_DENYWR作爲第三個參數。

+0

這是一個很好的答案,但它既不是標準C,也不是winapi。這是「兩全其美」,而不是他們中的任何一個:-) – Amit

相關問題