У меня есть два процесса. Одна запись в файл сопоставления памяти с использованием .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);
Сначала я запускаю Писатель, затем Читатель.
Я проверил это, используя этот наивный подход:
while (true)
{
try
{
new FileStream(mapPath + "map.mp", FileMode.Open, FileAccess.Read, FileShare.Delete | FileShare.ReadWrite);
break;
}
catch { }
}
Примерно через 10 секунд Читатель обычно получает разрешение, и все работает гладко. Если бы я поймал исключение, он бросил бы:
IOException: нарушение общего доступа к пути
C: \ путь в
System.IO.FileStream..ctor
(Путь System.String, режим FileMode,
Доступ к FileAccess, общий доступ к FileShare,
Int32 bufferSize, логический анонимный,
Опции FileOptions) [0x00000] в
: 0
Есть идеи, почему эти два процесса не делят файл должным образом с самого начала?