1

我想在兩個進程之間傳遞一些信息。基本上,它是一些字符串,並且因爲我不想以任何方式限制字符串(我可以通過命令行傳遞它,因爲我產生了第二個進程)我想給共享內存一個去。 (命名管道從樣本看起來更復雜一些。)MemoryMappedFiles和StreamRead/StreamWriter第一個字符丟失

所以我只是簡單地複製/粘貼樣本(實際上,樣本使用的二進制流,我使用文本流)代碼並立即使用斷點進行同步。

發件人代碼

 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代替還是可能是這裏的問題?

回答

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 
) 
+0

我應該已經閱讀更好,而不僅僅是複製/粘貼的HTTP:// MSDN。 microsoft.com/en-us/library/dd267552.aspx。非常感謝!! –

+0

我也複製/調配過!我希望我做對了。 :d –