如何检测MemoryMappedFile是否正在使用
本文关键字:是否 MemoryMappedFile 何检测 检测 | 更新日期: 2023-09-27 18:25:48
在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
上抛出异常。在我尝试调用OpenExisting
之前,有没有办法检查MemoryMappedFile
是否真的存在?还是每次都要处理例外情况?
此外,是否有一种方法可以查明当前句柄是否是最后一个打开MemoryMappedFile
的句柄,以确定在处理当前句柄时是否会关闭文件?
您可以使用MemoryMappedFile.CreateOrOpen:
map = MemoryMappedFile.CreateOrOpen(
MapName, length + 16,
MemoryMappedFileAccess.ReadWrite,
MemoryMappedFileOptions.None, null, HandleInheritability.None);
接受答案请参阅韩在原问题下的评论。既然我不能将其标记为已接受,我就在这里引用它,并将其标记为此已接受。