我正在关注本教程here
我很难弄清楚如何获取字符串“这是一个测试消息”来存储在内存映射文件中,然后将其拉出另一端。该教程说要使用字节数组。请原谅我,我是新手,先尝试自己。
谢谢, 凯文
##Write to mapped file
using System;
using System.IO.MemoryMappedFiles;
class Program1
{
static void Main()
{
// create a memory-mapped file of length 1000 bytes and give it a 'map name' of 'test'
MemoryMappedFile mmf = MemoryMappedFile.CreateNew("test", 1000);
// write an integer value of 42 to this file at position 500
MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor();
accessor.Write(500, 42);
Console.WriteLine("Memory-mapped file created!");
Console.ReadLine(); // pause till enter key is pressed
// dispose of the memory-mapped file object and its accessor
accessor.Dispose();
mmf.Dispose();
}
}
##read from mapped file
using System;
using System.IO.MemoryMappedFiles;
class Program2
{
static void Main()
{
// open the memory-mapped with a 'map name' of 'test'
MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("test");
// read the integer value at position 500
MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor();
int value = accessor.ReadInt32(500);
// print it to the console
Console.WriteLine("The answer is {0}", value);
// dispose of the memory-mapped file object and its accessor
accessor.Dispose();
mmf.Dispose();
}
}
答案 0 :(得分:11)
您可以考虑编写字符串的长度,然后编写字符串的byte []形式 例如,如果我想写“Hello”,那么我将其转换为字节:
byte[] Buffer = ASCIIEncoding.ASCII.GetBytes("Hello");
然后在写入内存映射文件时执行以下操作。
MemoryMappedFile mmf = MemoryMappedFile.CreateNew("test", 1000);
MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor();
accessor.Write(54, (ushort)Buffer.Length);
accessor.WriteArray(54 + 2, Buffer, 0, Buffer.Length);
首先读取位置54并读取保存字符串长度的2个字节。然后你可以读取那个长度的数组并将其转换为字符串。
MemoryMappedFile mmf = MemoryMappedFile.CreateNew("test", 1000);
MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor();
ushort Size = accessor.ReadUInt16(54);
byte[] Buffer = new byte[Size];
accessor.ReadArray(54 + 2, Buffer, 0, Buffer.Length);
MessageBox.Show(ASCIIEncoding.ASCII.GetString(Buffer));
答案 1 :(得分:1)
我用它来写字符串的字符:
string contentString = "Hello";
char[] charsToWrite = contentString.ToCharArray();
accessor.WriteArray(0, charsToWrite, 0, charsToWrite.Length);
这写了宽字符。 C#和C ++程序都能够读取宽字符的数据。
答案 2 :(得分:1)
它可以与CreateOrOpen而不是CreateNew一起使用!用相同的代码
MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen("test", 1000);
MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor();
accessor.Write(54, (ushort)Buffer.Length);
accessor.WriteArray(54 + 2, Buffer, 0, Buffer.Length);
和
MemoryMappedFile mmf = MemoryMappedFile.CreateOrOpen("test", 1000);
MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor();
ushort Size = accessor.ReadUInt16(54);
byte[] Buffer = new byte[Size];
accessor.ReadArray(54 + 2, Buffer, 0, Buffer.Length);
MessageBox.Show(ASCIIEncoding.ASCII.GetString(Buffer));