如何对内存映射文件进行共享只读访问

本文关键字:共享 读访问 文件 内存 映射 | 更新日期: 2023-09-27 18:10:37

在使用内存映射文件在。net中尽可能快地读取文件流时,我遇到了IOException s的问题,由于两个进程读取同一文件的文件锁定。

有几个工厂方法来生产内存映射文件,我如何允许共享readonly访问?

如何对内存映射文件进行共享只读访问

下面是一个简化的工厂方法,用于创建一个映射到路径的只读内存文件:

public static MemoryMappedFile MemFile(string path)
{
     return MemoryMappedFile.CreateFromFile(
               //include a readonly shared stream
               File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read),
               //not mapping to a name
               null,
               //use the file's actual size
               0L, 
               //read only access
               MemoryMappedFileAccess.Read, 
               //not configuring security
               null,
               //adjust as needed
               HandleInheritability.None,
               //close the previously passed in stream when done
               false);
}

创建和使用完整的流:

using (var memFile = MemFile(path))
using (var stream = memFile.CreateViewStream(0L, 0L, MemoryMappedFileAccess.Read))
{
     //do stuff with your stream
}