无法删除内存映射文件的文件



以下代码引发此异常:

"进程无法访问文件'\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);

编辑:

看起来只有在析构函数中我才有这个问题。当在其他地方调用dispose()时,它可以正常工作,但当我执行以下操作时,它会抛出异常。Reader和mmf显然是这一类的成员。一旦输入构造函数,文件访问是否会发生隐含的情况?

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

如果可能,您应该使用using构造:

using (var mmf = MemoryMappedFile.CreateFromFile(filename,
                   System.IO.FileMode.OpenOrCreate,
                   "myMap" + fileNo.ToString(), fileSize))
{
    using (reader = mmf.CreateViewAccessor(0, accessorSize))
    {  
       ... <do stuff> ...
    }
}
File.Delete(filename);

否则,在readermmf对象上调用Dispose(),但是using将确保在<do stuff>中引发异常的情况下对其进行清理。

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

reader.Dispose();
mmf.Dispose();
File.Delete(filename);

相关内容

  • 没有找到相关文章

最新更新