MemoryMappedFiles和StreamRead / StreamWriter缺少第一个字符

时间:2014-02-18 21:51:17

标签: c# streamreader streamwriter memory-mapped-files inter-process-communicat

我想在两个进程之间传递一些信息。基本上,它是一些字符串,因为我不想以任何方式限制字符串(我可以通过命令行传递它,因为我产生第二个进程)我想给共享内存一个去。 (命名管道似乎比样品更复杂。)

所以我只是复制/粘贴样本(实际上,样本使用二进制流,我使用文本流)代码并立即使用断点进行同步。

发件人代码

        using (System.IO.MemoryMappedFiles.MemoryMappedFile mmf = System.IO.MemoryMappedFiles.MemoryMappedFile.CreateNew("mymappedfile", 10000))
        {
            using (System.IO.MemoryMappedFiles.MemoryMappedViewStream stream = mmf.CreateViewStream())
            {
                StreamWriter w = new StreamWriter(stream);
                w.WriteLine("Hello!");
                w.WriteLine("Andreas!");
                w.WriteLine("Teststring #+#\"\" ,,a8&&");
                //BinaryWriter writer = new BinaryWriter(stream);
                w.Flush();
            }
        }

接收者代码

            using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("mymappedfile"))
            {
                using (MemoryMappedViewStream stream = mmf.CreateViewStream(1, 0))
                {
                    StreamReader r = new StreamReader(stream);
                    string str;
                    while ((str = r.ReadLine()) != null)
                    {
                        System.Diagnostics.Debug.WriteLine(str);
                    }
                }
            }

输出

ello!
Andreas!
Teststring #+#"" ,,a8&&

有你好的H!丢失。

我应该使用BinaryStreams还是可能会出现问题?

1 个答案:

答案 0 :(得分:2)

 mmf.CreateViewStream(1/* selects first byte */, 0)

 mmf.CreateViewStream(0/* selects zeroth byte*/, 0)

这是:http://msdn.microsoft.com/en-us/library/dd267553(v=vs.110).aspx

像这样:

public MemoryMappedViewStream CreateViewStream(
    long offset, // you have set it to 1 but should start from 0 
    long size
)