В 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
, чтобы определить, будет ли файлбыть закрытым, когда текущий дескриптор расположен?