【问题标题】:Getting file handle from memory从内存中获取文件句柄
【发布时间】:2015-05-22 06:09:36
【问题描述】:

我正在尝试将一个相对较大的文件加载到内存中,并能够通过HANDLE 访问它,就像CreateFile() 检索到的一样。

工作流程:

  1. 加载文件

  2. 在内存中加载时更改多个属性

  3. 使用有效的HANDLE 将修改后的文件用于其他目的

我无法再次将文件保存到 HDD。

在 MSDN 上有一个示例,我可以在其中创建共享内存:Creating Named Shared Memory 不幸的是,我不太确定这与我的分配有多相关,因为函数检索到的句柄是 FileMapping 句柄,并且缓冲区本身是一个LPCTSTR 指针。

【问题讨论】:

  • 是要将文件读入内存,还是通过文件映射访问。
  • 从听起来你唯一真正的选择是制作文件的临时副本并打开并修改它。
  • @DavidHeffernan,我不知道我是否想通过文件映射来访问它,这是一种可能性,不确定是否最好,甚至是否可行。
  • 我还是不明白你的问题是什么。没关系。
  • @DavidHeffernan 我相信 OP 想要打开一个文件,对其进行未反映在磁盘上的“虚拟”更改,然后将文件句柄传递给其他东西,然后读取“虚拟修改”版本。

标签: c++ winapi memory memory-management shared-memory


【解决方案1】:

好吧,出于所有实际目的,您无法阻止 RAM 被交换到 HDD,所以我会给您一个同样好的解决方案。

使用CreateFile(... , FILE_ATTRIBUTE_TEMPORARY | FILE_FLAG_DELETE_ON_CLOSE) 创建一个新文件HANDLE。这告诉操作系统,除非 RAM 稀缺,否则内容不需要离开文件缓存 (RAM)。而且我们已经确定,当 RAM 用完时,任何东西都可以交换到磁盘。

接下来,将源文件中的内容复制到新的临时文件中,并根据需要进行修改。

【讨论】:

    猜你喜欢
    • 2011-03-19
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多