与C#App共享的C ++ CFile无法正常工作?

时间:2016-04-25 07:40:14

标签: c# c++ cfile

我在创建和填充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#app中,我尝试了两种不同的打开文件的方法:

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#app。

我希望问题出现在我尝试读取文件的c#代码中,因为当我在c ++应用程序中添加共享权限时,记事本没有错误,但是当我没有设置权限时会出错。

最后,我按照我想要的方式使用Soonts'建议。

将c ++ fileshare选项设置为:

txtFile.Open(m_FileName, CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite, &e)

让c#应用程序读取文件,但不写入文件。

在c#app中读取文件:

using (FileStream stream = new FileStream(inputfilepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))

将文件访问权限设置为只读。但是将文件共享权限设置为readwrite允许在文件被另一个应用程序写入时打开该文件。我出错的地方是只读文件共享权限,因为它甚至在文件打开之前与c ++应用程序冲突。所以它不会打开。

1 个答案:

答案 0 :(得分:0)

在C ++中,指定CFile :: shareDenyNone或CFile :: shareDenyWrite(就像你正在做的那样)

在C#中,指定FileShare.Write或FileShare.ReadWrite。