将内存映射文件读取到字符串

时间:2017-12-24 23:02:53

标签: c# memory-mapped-files

我正在尝试从内存映射文件中读取数据,该文件从C ++程序写入内存文件。我能够使用debug方法并将数据作为循环中的字符串写入。但是,我想将字节数组转换为可以操作的可用字符串。

using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("DataFile"))
{
    using (MemoryMappedViewAccessor reader = mmf.CreateViewAccessor())
    {
        var bytes = new byte[reader.Capacity];
        reader.ReadArray<byte>(0, bytes, 0, bytes.Length);
        for(int i = 0; i<bytes.Length; i++)
        {
            System.Diagnostics.Debug.Write((char) bytes[i]);
        }
    }
}

我尝试删除for循环并将其替换为GetString()编码器,但它只返回一个问号字符而不是完整的数据字符串。

1 个答案:

答案 0 :(得分:3)

只要您知道编写字节的编码很容易,您就可以使用例如System.Text.UTF8Encoding类(可能是System.Text.Encoding.UTF8实例)和GetString方法:

string str = System.Text.Encoding.UTF8.GetString(bytes, 0, bytes.Length);

如果您不知道编码这会变得更难,您将不得不尝试使用启发式方法并猜测编码实际上是什么。

相关问题