Получение разрешения на чтение файла при использовании 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

Есть идеи, почему эти два процесса не делят файл должным образом с самого начала?

0 ответов

Другие вопросы по тегам