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

发布于 2024-12-28 13:33:57 字数 1104 浏览 1 评论 0 原文

是否可以像在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);    

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

Is it possible to open memory mapped file in C# directly just like opening files directly in windows,
say for example, I'm creating memory mapped file. through following code.

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();
        }
    }
}

I need to open the file directly. Is it possible like opening file through

Process.start("test.txt");

from another process instead of reading values by the code .

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

If it possible to open memory mapped file directly? Please let me know.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

抱猫软卧 2025-01-04 13:33:57

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

Starting with the .NET Framework version 4, you can use managed code
to access memory-mapped files in the same way that native Windows
functions access memory-mapped files, as described in Managing
Memory-Mapped Files in Win32 in the MSDN Library.

无所谓啦 2025-01-04 13:33:57

MemoryMappedFile.CreateNew 方法创建一个不与磁盘上的文件。所以不,你不能直接打开该文件,因为不存在该文件。 (此类文件映射对象由系统分页文件支持,如 此处描述。)

您可以使用 MemoryMappedFile.CreateFromFile 方法文件。

The MemoryMappedFile.CreateNew method creates a file mapping object that is not associated with a file on disk. So no, you can't open the file directly, because there isn't one. (Such file mapping objects are backed by the system paging file, as described here.)

You can use the MemoryMappedFile.CreateFromFile method instead if you want to associate the file mapping object with an actual file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文