如何检测MemoryMappedFile是否正在使用中

Bry*_*ner 5 c# memory-mapped-files

在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;
    }
}
Run Code Online (Sandbox Code Playgroud)

它几乎按照我想要的方式工作,但最终OpenExisting会经常抛出异常.MemoryMappedFile在尝试OpenExisting拨打电话之前,有没有办法检查实际存在?或者我每次都必须处理异常?

此外,有没有办法找出当前句柄是否是最后一个MemoryMappedFile打开,以确定当处理当前句柄时文件是否将被关闭?

Bry*_*ner 0

请参阅 Han Passant 在原始问题下的评论以获取已接受的答案。由于我无法将其标记为已接受,因此我将在此处引用它并将其标记为已接受。