【问题标题】:Handling Memory mapped File in C# directly from the memory直接从内存中处理 C# 中的内存映射文件
【发布时间】:2012-01-23 08:18:06
【问题描述】:

是否可以像直接在windows中打开文件一样直接在C#中打开内存映射文件, 例如,我正在创建内存映射文件。通过以下代码。

using System;
using System.IO.MemoryMappedFiles;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            MemoryMappedFile mmf = MemoryMappedFile.CreateNew("test.txt", 5);
            MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor();
            var arun = new[] {(byte)'a', (byte)'r', (byte)'u', (byte)'n'};
            for (int i = 0; i < arun.Length; i++)
                accessor.Write(i, arun[i]);
            Console.WriteLine("Memory-mapped file created!");
            Console.ReadLine(); // pause till enter key is pressed
            accessor.Dispose();
            mmf.Dispose();
        }
    }
}

我需要直接打开文件。是否可以通过

打开文件

Process.start("test.txt");

来自另一个进程,而不是通过代码读取值。

 MemoryMappedFile mmf1 = MemoryMappedFile.OpenExisting("test.txt");
 MemoryMappedViewAccessor accessor1 = mmf1.CreateViewAccessor();
 var  value = accessor1.ReadByte(4);    

是否可以直接打开内存映射文件?请告诉我。

【问题讨论】:

  • 为什么使用内存映射文件只是为了对其进行简单的文件操作?
  • 虽然是简单的文件操作但是很难直接从内存中访问是不是?
  • 在您的代码中没有任何地方可以像读取内存一样访问内容。
  • @leppie:这是示例代码(“比如说”),旨在展示他想要实现的目标,他大概有一个合理的理由在他的真实代码中使用文件映射。
  • 我仍然希望是实际文件,你没有帮助

标签: c# .net windows c#-4.0 memory-mapped-files


【解决方案1】:

从 .NET Framework 版本 4 开始,您可以使用托管代码 以与本机 Windows 相同的方式访问内存映射文件 函数访问内存映射文件,如管理中所述 MSDN Library 中 Win32 中的内存映射文件。

【讨论】:

  • 所有关于内存映射文件的读/写,但我没有将打开的内存映射文件作为进程获取
【解决方案2】:

MemoryMappedFile.CreateNew 方法创建一个与磁盘上的文件无关的文件映射对象。所以不,你不能直接打开文件,因为没有。 (此类文件映射对象由系统分页文件支持,如described here。)

如果您想将文件映射对象与实际文件相关联,您可以改用MemoryMappedFile.CreateFromFile 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 2018-02-09
    • 2020-11-06
    相关资源
    最近更新 更多