tag:blogger.com,1999:blog-6315023066883859438.post1351084879141071008..comments2023-09-16T05:42:28.173-07:00Comments on Programming .Net: .Net 4.0 :- Memory Mapped FilesDigvijay Maturahttp://www.blogger.com/profile/11917053558088600307noreply@blogger.comBlogger1125tag:blogger.com,1999:blog-6315023066883859438.post-28075395414426175332012-12-14T14:13:58.138-08:002012-12-14T14:13:58.138-08:00Hi, i create console aplication using your sample....Hi, i create console aplication using your sample... And i have problem, two process not open file. Please can you see?<br /><br />using System;<br />using System.IO;<br />using System.IO.MemoryMappedFiles;<br />using System.Threading;<br /><br />namespace MemoryFileTest<br />{<br /> class Program<br /> {<br /> static void Main(string[] args)<br /> {<br /> var path = @"c:\work\mmf.dat";<br /> var map = "testmap123";<br /> var fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);<br /><br /> if (fs.Length == 0)<br /> {<br /> fs.SetLength(1024);<br /> }<br /><br /> try<br /> {<br /> var sec = new MemoryMappedFileSecurity();<br /> var mem = MemoryMappedFile.CreateFromFile(fs, map, fs.Length, MemoryMappedFileAccess.ReadWrite, sec, HandleInheritability.Inheritable, false);<br /><br /> WriteRole(mem);<br /> }<br /> catch (Exception exp)<br /> {<br /> fs.Close();<br /><br /> var mem = MemoryMappedFile.OpenExisting(map, MemoryMappedFileRights.FullControl, HandleInheritability.Inheritable);<br /><br /> ReadRole(mem);<br /> }<br /><br /> }<br /><br /> static void WriteRole(MemoryMappedFile mem)<br /> {<br /> Console.WriteLine("Begin write role.");<br /><br /> var ptr = mem.CreateViewAccessor(0, 1024, MemoryMappedFileAccess.ReadWrite);<br /><br /> while (true)<br /> {<br /> int mode;<br /><br /> ptr.Read(0, out mode);<br /><br /> if (mode < 2)<br /> {<br /> Console.WriteLine("Write new time to my friend.");<br /><br /> var str = DateTime.Now.ToString();<br /> var pos = 4l;<br /><br /> ptr.Write(pos, str.Length);<br /><br /> pos += 4;<br /><br /> for (int i = 0; i < str.Length; ++i)<br /> {<br /> ptr.Write(pos, str[i]);<br /><br /> pos += 2;<br /> }<br /><br /> ptr.Write(0, 2);<br /> }<br /><br /> Thread.CurrentThread.Join(500);<br /> }<br /> }<br /><br /> static void ReadRole(MemoryMappedFile mem)<br /> {<br /> Console.WriteLine("Begin read role.");<br /><br /> var ptr = mem.CreateViewAccessor(0, 1024, MemoryMappedFileAccess.ReadWrite);<br /><br /> while (true)<br /> {<br /> int mode;<br /><br /> ptr.Read(0, out mode);<br /><br /> if (mode == 2)<br /> {<br /> var pos = 4l;<br /> var len = ptr.ReadInt32(pos);<br /> var arr = new char[len];<br /><br /> pos += 4;<br /><br /> for (int i = 0; i < len; ++i)<br /> {<br /> arr[i] = ptr.ReadChar(pos);<br /><br /> pos += 2;<br /> }<br /><br /> var str = new string(arr);<br /><br /> Console.WriteLine(str);<br /><br /> ptr.Write(0, 1);<br /> }<br /><br /> Thread.CurrentThread.Join(500);<br /> }<br /> }<br /><br /> }<br />}<br />Максимhttps://www.blogger.com/profile/17056969693882652973noreply@blogger.com