我在创建和填充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 ++应用程序冲突。所以它不会打开。
答案 0 :(得分:0)
在C ++中,指定CFile :: shareDenyNone或CFile :: shareDenyWrite(就像你正在做的那样)
在C#中,指定FileShare.Write或FileShare.ReadWrite。