Получение разрешения на чтение файла при использовании MMF - PullRequest
1 голос
/ 19 июня 2011

У меня есть два процесса. Одна запись в файл сопоставления памяти с использованием .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

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

...