在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
的句柄,以确定在释放当前句柄时是否将关闭文件? 最佳答案
您可以使用MemoryMappedFile.CreateOrOpen:
map = MemoryMappedFile.CreateOrOpen(
MapName, length + 16,
MemoryMappedFileAccess.ReadWrite,
MemoryMappedFileOptions.None, null, HandleInheritability.None);