Как определить, используется ли MemoryMappedFileC#

Место общения программистов C#
Anonymous
Как определить, используется ли MemoryMappedFile

Сообщение Anonymous »

В C# 4.0 MemoryMappedFile имеет несколько фабричных методов: CreateFromFile, CreateNew, CreateOrOpen или OpenExisting. Мне нужно открыть MemoryMappedFile, если он существует, а если нет, создать его из файла. Мой код для открытия карты памяти выглядит так:

Код: Выделить всё

try
{
map = MemoryMappedFile.OpenExisting(
MapName,
MemoryMappedFileRights.ReadWrite
| MemoryMappedFileRights.Delete);
}
catch (FileNotFoundException)
{
try
{
stream = new FileStream(
FileName,
FileMode.OpenOrCreate,
FileAccess.ReadWrite,
FileShare.Read | FileShare.Delete);
map = MemoryMappedFile.CreateFromFile(
stream, MapName, length + 16,
MemoryMappedFileAccess.ReadWrite,
null,
HandleInheritability.None,
false);
}
catch
{
if (stream != null)
stream.Dispose();
stream = null;
}
}
Это в значительной степени работает так, как я хочу, но в конечном итоге слишком часто выдает исключение OpenExisting. Есть ли способ проверить, действительно ли существует MemoryMappedFile, прежде чем я попытаюсь выполнить вызов OpenExisting? Или мне каждый раз приходится иметь дело с исключением?

Кроме того, есть ли способ узнать, является ли текущий дескриптор последним, имеющим MemoryMappedFile< /code> open, чтобы определить, будет ли файл закрыт после удаления текущего дескриптора?

Подробнее здесь: https://stackoverflow.com/questions/942 ... -is-in-use

Вернуться в «C#»