在C#中直接从内存处理内存映射文件

6
在C#中是否可以像在Windows中直接打开文件一样直接打开内存映射文件呢?例如,我通过以下代码创建了内存映射文件。
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
虽然这是简单的文件操作,但要直接从内存中访问却很困难,不是吗? - Arunkumar Chandrasekaran
你的代码中没有任何地方像读取内存一样访问内容。 - leppie
@leppie:那是示例代码(“例如说”),旨在演示他想要实现的内容,他可能有一个明智的理由在他的真实代码中使用文件映射。 - Harry Johnston
我仍然期望获得实际的文件,你提供的并没有帮助。 - Arunkumar Chandrasekaran
2个回答

4

我了解关于内存映射文件的读写,但我不知道如何将内存映射文件作为一个进程打开。 - Arunkumar Chandrasekaran

2

MemoryMappedFile.CreateNew 方法创建的文件映射对象不与磁盘上的文件相关联。因此,您不能直接打开该文件,因为没有这样的文件。相应的文件映射对象由系统分页文件支持,如此处所述

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接