无法删除MemoryMappedFile的文件

hdt*_*hdt 5 c# file memory-mapped-files

以下代码抛出此异常:

"该进程无法访问文件'\ filename',因为它正由另一个进程使用."

很公平,但关闭阅读器和/或mmf的正确方法是什么,以便删除文件?我认为MemoryMappedFile会有一个close()方法或类似的东西,但事实并非如此.

任何帮助将不胜感激.谢谢.

mmf = MemoryMappedFile.CreateFromFile(filename,
      System.IO.FileMode.OpenOrCreate,
      "myMap" + fileNo.ToString(),
      fileSize);

reader = mmf.CreateViewAccessor(0, accessorSize);

<do stuff>

File.Delete(filename);
Run Code Online (Sandbox Code Playgroud)

EDITS:

看起来它只是在析构函数中我遇到了这个问题.当在其他地方调用dispose()时它工作正常,但是当我执行以下操作时它会抛出异常.Reader和mmf显然是班上的成员.输入构造函数后,文件访问是否隐式发生了什么?

~Class()
{
    try
    {
        if (File.Exists(filename))
        {
            reader.Dispose();
            mmf.Dispose();
            File.Delete(filename);
        }
    }
    catch (Exception e)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

bdo*_*lan 3

在删除文件之前,您必须处理映射:

reader.Dispose();
mmf.Dispose();
File.Delete(filename);
Run Code Online (Sandbox Code Playgroud)