在 C# 4.0 中,MemoryMappedFile
有几种工厂方法:CreateFromFile
, CreateNew
, CreateOrOpen
, or 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
open,确定当当前句柄被释放时文件是否将被关闭?
您可以使用内存映射文件.CreateOrOpen http://msdn.microsoft.com/en-us/library/system.io.memorymappedfiles.memorymappedfile.createoropen.aspx:
map = MemoryMappedFile.CreateOrOpen(
MapName, length + 16,
MemoryMappedFileAccess.ReadWrite,
MemoryMappedFileOptions.None, null, HandleInheritability.None);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)