Получение разрешения на чтение файла при использовании MMF
У меня есть два процесса. Одна запись в отображенный в память файл с использованием.NET 4 MemoryMappedFiles, а другая - чтение файла с использованием FileStream в.NET 3.5 (MONO). Все работает нормально, когда я получаю разрешение, нет проблем с чтением или записью файла. Проблема в том, чтобы получить разрешение.
Написание 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:\path в System.IO.FileStream..ctor (путь System.String, режим FileMode, доступ к FileAccess, общий доступ к FileShare, буфер32Size Int32, логический аноним, параметры FileOptions) [0x00000] в:0
Есть идеи, почему эти два процесса не делят файл должным образом с самого начала?