5

私はこのチュートリアルhereに従っています

文字列「THIS IS A TEST MESSAGE」を取得してメモリ マップド ファイルに保存し、それを反対側に引き出す方法を理解するのに苦労しています。チュートリアルでは、バイト配列を使用するように指示されています。私はこれが初めてで、最初は自分で試してみてください。

ありがとう、ケビン

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

3 に答える 3

12

文字列の長さを書き込んでから、文字列のbyte[]形式を書き込むことを検討できます。
たとえば、「He​​llo」と書きたい場合は、バイトに変換します。

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));
于 2012-10-18T18:07:17.300 に答える