簡體   English   中英

與C#App共享C ++ CFile不能正常工作嗎?

[英]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.

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