我正在使用MemoryMappedFile在两个程序之间进行通信。程序“A”创建了一个内存映射文件(mmf),并在定时器上读取其内容。程序“B”在定时器上向mmf写入xml数据。我已经使内存映射正常工作,但遇到一个问题,即前一次迭代的XML数据比当前数据长,旧数据会被带到下一轮中。
为了简单起见,让我们假设程序B写入:
aaaa
程序A将正确读取,
然后程序B的下一次写入是:
b
程序A读取
baaa
似乎应该有一种简单的方法来清空内存映射文件的内容,但我似乎想不出来。很可能我完全错误地处理了这个问题。
以下是我目前正在做的事情。
程序A:
using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("testmap",MemoryMappedFileRights.ReadWrite))
{
Mutex mutex = Mutex.OpenExisting("testmapmutex");
mutex.WaitOne();
string outputtext;
using (MemoryMappedViewStream stream = mmf.CreateViewStream(0,0))
{
XmlSerializer deserializer = new XmlSerializer(typeof(MyObject));
TextReader textReader = new StreamReader(stream);
outputtext = textReader.ReadToEnd();
textReader.Close();
}
mutex.ReleaseMutex();
return outputtext; //ends up in a textbox for debugging
}
程序 B
using (MemoryMappedFile mmf = MemoryMappedFile.OpenExisting("testmap", MemoryMappedFileRights.ReadWrite))
{
Mutex mutex = Mutex.OpenExisting("testmapmutex");
mutex.WaitOne();
using (MemoryMappedViewStream stream = mmf.CreateViewStream(0, 0))
{
XmlSerializer serializer = new XmlSerializer(typeof(MyObject));
TextWriter textWriter = new StreamWriter(stream);
serializer.Serialize(textWriter, myObjectToExport);
textWriter.Flush();
}
mutex.ReleaseMutex();
}
stream.SetLength(stream.Position);
来截断文件到当前位置。 - Thomas Weller