using (MemoryMappedFile mmFile = MemoryMappedFile.CreateNew("Raise", 1000))
{
using (MemoryMappedViewAccessor accessor = mmFile.CreateViewAccessor())
{
accessor.Write(500, 11082003);
Console.WriteLine("Memory-mapped file created!");
}
}
using (MemoryMappedFile mmFile = MemoryMappedFile.OpenExisting("Raise"))
{
using (MemoryMappedViewAccessor accessor = mmFile.CreateViewAccessor())
{
int value = accessor.ReadInt32(500);
Console.WriteLine("The answer is : {0}", value);
}
}
但是,每次我尝试读取整数值 11082003 时,这就是我得到的结果,System.IO.FileNotFoundException:“无法找到指定的文件。”。可能是什么问题?
MemoryMappedFile.CreateNew
的文档:
使用此方法创建一个不持久的内存映射文件(即不与磁盘上的文件关联),您可以使用该文件在进程之间共享数据。
因此,当您处理掉它时,该名称就不再有效。
如果您更改代码以避免在最后处理“创建”部分,那么它会起作用:
using System.IO.MemoryMappedFiles;
using (MemoryMappedFile mmFile1 = MemoryMappedFile.CreateNew("Raise", 1000))
{
using (MemoryMappedViewAccessor accessor = mmFile1.CreateViewAccessor())
{
accessor.Write(500, 11082003);
Console.WriteLine("Memory-mapped file created!");
}
using (MemoryMappedFile mmFile2 = MemoryMappedFile.OpenExisting("Raise"))
{
using (MemoryMappedViewAccessor accessor = mmFile2.CreateViewAccessor())
{
int value = accessor.ReadInt32(500);
Console.WriteLine("The answer is : {0}", value);
}
}
}
或者,要使用 实际 文件,您可以两次使用
CreateFromFile
:
using System.IO.MemoryMappedFiles;
using (MemoryMappedFile mmFile = MemoryMappedFile.CreateFromFile("Raise", FileMode.Create, null, 1000))
{
using (MemoryMappedViewAccessor accessor = mmFile.CreateViewAccessor())
{
accessor.Write(500, 11082003);
Console.WriteLine("Memory-mapped file created!");
}
}
using (MemoryMappedFile mmFile = MemoryMappedFile.CreateFromFile("Raise"))
{
using (MemoryMappedViewAccessor accessor = mmFile.CreateViewAccessor())
{
int value = accessor.ReadInt32(500);
Console.WriteLine("The answer is : {0}", value);
}
}