[英]C++ CFile sharing with C# App not working?
我在創建文件並使用c ++應用程序填充文件時遇到麻煩,而該文件仍可以在c ++應用程序中打開,而由其他c#應用程序讀取。
我用以下行創建文件:
txtFile.Open(m_FileName, CFile::modeCreate | CFile::modeWrite | CFile::shareDenyWrite, &e)
我也嘗試過使用以下行:
txtFile.Open(m_FileName, CFile::modeCreate|CFile::modeWrite|CFile::shareDenyNone, &e)
和:
txtFile.Open(m_FileName, CFile::modeCreate|CFile::modeWrite, &e)
具有相同的結果。
然后,在c#應用程序中,我嘗試了2種打開文件的方法:
FileStream fs = File.OpenRead(inputfilepath);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
和
byte[] buffer;
using (FileStream stream = new FileStream(inputfilepath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
}
兩種方法都會捕獲錯誤:
該進程無法訪問文件“ filename.txt”,因為它正在被另一個進程使用。
C ++應用程序創建文件,然后使用CreateProcess運行C#應用程序。
我希望問題出在C#代碼中,因為我在c ++應用程序中添加共享權限時,記事本不會出現任何錯誤,而當我未設置權限時卻會出錯,因此我嘗試讀取該文件。
最后,我按照Soonts的建議以自己想要的方式工作。
將c ++ fileshare選項設置為:
txtFile.Open(m_FileName, CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite, &e)
讓C#應用程序讀取文件,但不寫入文件。
在C#應用程序中使用以下命令讀取文件:
using (FileStream stream = new FileStream(inputfilepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
將文件訪問權限設置為只讀。 但是,將文件共享權限設置為readwrite可以在文件被另一個應用程序寫入時打開。 我出錯的地方是,只有文件共享權限才可以讀取,因為它甚至在打開文件之前就與c ++應用程序發生沖突。 因此它不會打開。
在C ++中,指定CFile :: shareDenyNone或CFile :: shareDenyWrite(就像您在做的那樣)
在C#中,指定FileShare.Write或FileShare.ReadWrite。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.