我有两个过程。一个使用 .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:在 System.IO.FileStream..ctor 的路径 C:\path 上共享冲突(System.String 路径、FileMode 模式、FileAccess 访问、FileShare 共享、Int32 bufferSize、布尔匿名、FileOptions 选项)[0x00000] in :0
知道为什么这两个进程从一开始就不能正确共享文件吗?