在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
的最后句柄,以确定当前句柄被处理时文件是否会被关闭?
答案 0 :(得分:0)
您可以使用MemoryMappedFile.CreateOrOpen:
map = MemoryMappedFile.CreateOrOpen(
MapName, length + 16,
MemoryMappedFileAccess.ReadWrite,
MemoryMappedFileOptions.None, null, HandleInheritability.None);
答案 1 :(得分:0)
请参阅Han Passant在原始问题下对已接受答案的评论。由于我无法将其标记为已接受,因此我将在此处引用并将其标记为已接受。