我有两个过程。一个使用.NET 4 MemoryMappedFiles写入内存映射文件,另一个使用.NET 3.5(MONO)中的FileStream读取文件。获得许可后一切正常,读取或写入文件没问题。问题是获得许可。
写MMF(作家):
MemoryMappedFile.CreateFromFile
(filenameToMap, FileMode.Create, "Something",
Marshal.SizeOf(objectToMap), MemoryMappedFileAccess.ReadWrite);
阅读MMF(读者):
new FileStream(filenameToMap, FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite);
首先我启动Writer,然后启动Reader。
我使用这种天真的方法测试了它:
while (true)
{
try
{
new FileStream(mapPath + "map.mp", FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite);
break;
}
catch { }
}
大约10秒后,Reader通常会获得许可,一切顺利进行。如果我会抓住异常,它会抛出:
IOException:在路径上共享违规 C:\路径在 System.IO.FileStream..ctor (System.String路径,FileMode模式, FileAccess访问,FileShare共享, Int32 bufferSize,布尔匿名, FileOptions选项)[0x00000] in :0
知道为什么这两个进程从一开始就没有正确共享文件?