无法删除 MemoryMappedFile 的文件

2024-03-21

以下代码抛出此异常:

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

EDITS:

看来只有在析构函数中我才遇到这个问题。当在其他地方调用 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);

否则请致电Dispose() on the reader and mmf然而对象using将确保在抛出异常的情况下将其清理干净<do stuff>.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法删除 MemoryMappedFile 的文件 的相关文章

随机推荐

  • MSVC 的 open_memstream 的等效项

    我在用打开内存流在我的一个库中 但我想将该库移植到 MSVC 似乎没有可用的等效功能 但是有足够相似的功能吗 What 打开内存流所做的是它需要一个 char 目的地和大小并返回一个您可以写入的 FILE 数据存储在动态分配的缓冲区中 可从
  • 如何在 OS X 中包含 FFI?

    我在构建时遇到问题这个项目 https github com metaeducation ren c启用 FFI 扩展 为了隔离问题 我正在尝试编译这个例子 http www chiark greenend org uk doc libff
  • OSError:图像文件被截断

    当我处理一堆图像时 其中一个图像出现此错误 File home tensorflowpython firstmodel yololoss py line 153 in data generator image box get random
  • ASP.NET MVC - 如何根据登录用户的角色权限隐藏或显示链接/按钮?

    我正在使用 ASP NET MVC4 这是我的用户角色 1 Administrator 2 L1 Admin 3 L2 Admin 管理员组用户有设置权限 用于添加 权限设置 查看日志 错误报告等 如果用户是管理员组的成员 他只能看到与上述
  • Typescript + React/Redux:类型“IntrinsicAttributes”和“IntrinsicClassAttributes”上不存在属性“XXX”

    我正在开发一个使用 Typescript React 和 Redux 全部在 Electron 中运行 的项目 当我将一个基于类的组件包含在另一个组件中并尝试在它们之间传递参数时 我遇到了问题 宽松地说 我的容器组件结构如下 class C
  • 如何使用类型提示指定多个返回类型

    我在 python 中有一个函数 它可以返回一个bool or a list 有没有办法使用类型提示指定返回类型 例如 这是正确的方法吗 def foo id gt list or bool 从文档中 联合型 https docs pyth
  • TSQL 仅显示第一行

    我有以下 SQL 查询 SELECT DISTINCT MyTable1 Date FROM MyTable1 INNER JOIN MyTable2 ON MyTable1 Id MyTable2 Id WHERE Name John O
  • 禁用 jquery 1.6 中的元素

    随着 jQuery 1 6 的发布 对 SO 的建议是普遍开始使用prop http api jquery com prop 你以前用过的地方attr 当我想禁用某个元素时会发生什么 control prop disabled disabl
  • 如何解决查询 ImportRange 错误

    希望能得到一个正确方向的小指点 我绝对不是程序员 但我正在努力学习 QUERY IMPORTRANGE 1ZKw8d7OKX LqnYx 84IHP2fuBo 6rzzZ7TuaQOfCjio Data A2 D7 select Col1
  • 如何在 Vue.js 中实现父孙之间的双向数据绑定

    我遇到了一个问题 我通过 cookie 解决它 但我想在没有 cookie 的情况下解决问题 我有一个名为 app header 的组件 它还有另一个名为 outmodal 的组件 现在 我的第一个 Vue 实例需要组件应用程序标头 var
  • 函数依赖和规范化

    我正在尝试寻找一个很好的资源来研究函数依赖性和规范化 有人知道我应该去哪里吗 我很难区分 FD 属于 1NF 2NF 还是 3NF 我一直在阅读维基百科并使用谷歌搜索来找到好的研究 但找不到任何简单的解释 也许你们也可以分享一下您在生活中是
  • 使用 Sprite Kit 创建水(流体)表面[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我怎样才能创建水面精灵套件 我已经搜索并找到了帮助Cocos2d它使用box2d为水创建物理效果 例如漂浮在水面上的物体以及其部分在水
  • 在 PowerShell 中运行 CMD 命令

    我在运行 PowerShell 命令时遇到了很多问题 它所做的只是运行一个在 CMD 提示窗口中运行的命令 这是命令 C Program Files x86 Microsoft Configuration Manager AdminCons
  • MongoDB 线程安全吗?

    我在 Windows 上运行 MongoDB 我有 1 个或多个线程删除并重新创建集合 Using mongo exe与show collections 命令 我看到多个具有相同名称的集合 远远超过 1 000 个具有相同名称的集合 当我运
  • 什么是 href="#" 以及为什么使用它?

    在许多网站上我看到链接href 这是什么意思 它是干什么用的 关于超链接 锚标签的主要用途 a a 是作为超链接 http www w3 org MarkUp html spec html spec 7 html 这基本上意味着他们会带你去
  • 如何在没有 equals/hashcode 的情况下删除 List 中的重复对象?

    我必须删除列表中重复的对象 它是来自博客对象的列表 如下所示 public class Blog private String title private String author private String url private S
  • 从 numpy 数组转换为 RGB 图像

    我有三个 241 241 numpy 数组 我想将它们视为图像的红色 绿色和蓝色分量 我已经尝试过这个 import numpy as np from PIL import Image arr np zeros len x len z 3
  • GWT 模块可能需要(重新)编译 REDUX

    在编译模式下运行时 我收到这个可怕的 GWT Module mymodule may need to be re compiled 对话框消息 我已经编制了一份其他人建议在编译模式下运行的 GWT 给出此错误消息时建议尝试的操作列表 我已经
  • 如何将变量传递给 MySQL LIMIT 子句?

    我正在尝试使用 pymysql 对 Mysql 数据库执行 SELECT 语句 这是代码 我将一个变量传递给 select 语句 令我惊讶的是 这是一个巨大的痛苦 知道我在这里缺少什么吗 def getUrlFromDatabase n s
  • 无法删除 MemoryMappedFile 的文件

    以下代码抛出此异常 该进程无法访问文件 filename 因为它正在被另一个进程使用 很公平 但是关闭阅读器和 或 mmf 以便删除文件的正确方法是什么 我认为 MemoryMappedFile 会有一个 close 方法或类似的方法 但事