2012-07-10 61 views
2

打開在C++ WinAPI的應用程序的文件我使用此代碼無法打開它已被另一個我的應用程序

CreateFileW(path,FILE_APPEND_DATA,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); 

打開文件,而該文件由這個C++應用程序打開,我試圖打開它用於讀取C#應用程序,使用此代碼

var f = new StreamReader(path); 

我得到IOException異常「的進程無法訪問該文件,因爲它正在由另一進程使用」

我試過

var fs = new FileStream(path, FileMode.Open,FileAccess.Read) 

相同的結果。

我不明白爲什麼會發生這種情況。我在C++應用程序的CreateFile中指定了FILE_SHARE_READ。我打開它在C#中閱讀。它必須在C#應用程序中打開。我究竟做錯了什麼? 與此同時,notepad.exe可以打開此文件

回答

4

您在C#應用程序中使用的FileStream constructor將使用FileShare.Read選項打開文件,相當於FILE_SHARE_READ。

這意味着當打開文件時,允許其他程序打開文件供讀取,但不能寫入。但是你的C++程序已經打開了文件,所以你所請求的共享模式是不可能的,並且打開文件的嘗試失敗。

相反,這樣說:

var fs = 
    new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) 
+0

+1的說明。 – NoChance 2012-07-11 05:38:12

相關問題