visual-studio-2010 - C# 4 中 MemoryMappedFile 上的 UnauthorizedAccessException

标签 visual-studio-2010 .net-4.0 c#-4.0

我想尝试使用 MemoryMappedFile 来访问现有的二进制文件。如果这甚至可能,或者我是一个疯子?

这个想法是将现有的二进制文件直接映射到内存中,以便进行一些更高速的操作。或者至少看看这些东西是如何运作的。

        using System.IO.MemoryMappedFiles;


        System.IO.FileInfo fi = new System.IO.FileInfo(@"C:\testparsercap.pcap");
        MemoryMappedFileSecurity sec = new MemoryMappedFileSecurity();
        System.IO.FileStream file = fi.Open(System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite, System.IO.FileShare.ReadWrite);
        MemoryMappedFile mf = MemoryMappedFile.CreateFromFile(file, "testpcap", fi.Length, MemoryMappedFileAccess.Read, sec, System.IO.HandleInheritability.Inheritable, true);
        MemoryMappedViewAccessor FileMapView = mf.CreateViewAccessor();
        PcapHeader head = new PcapHeader();
        FileMapView.Read<PcapHeader>(0, out head);

我在 mf.CreateViewAccessor() 行上收到 System.UnauthorizedAccessException 未处理(消息=对路径的访问被拒绝。)。

我不认为这是文件权限,因为我作为一个很好的不安全管理员用户运行,并且没有打开任何其他可能对文件具有读锁定的程序。这是在禁用 UAC 的 Vista 上。

如果这根本不可能并且我错过了文档中的某些内容,请告诉我。我几乎找不到任何引用 .net 4.0 的此功能的内容

谢谢!

最佳答案

我知道这是一个老问题,但我遇到了同样的错误并且能够解决它。

即使我像您一样以只读方式打开 MemoryMappedFile (MemoryMappedFileRights.Read),我也需要将 View 访问器创建为只读:

var view = mmf.CreateViewAccessor(offset, size, MemoryMappedFileAccess.Read);

然后它起作用了。希望这对其他人有帮助。

关于visual-studio-2010 - C# 4 中 MemoryMappedFile 上的 UnauthorizedAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1220913/

相关文章:

javascript - 在正则表达式中转义撇号?

c++ - 是否可以设置 std::tr1::tuple 的默认值?

c# - 如何在 VS 2010 中使用大整数

.net - ASP.NET 工作进程是否仍以 31kb 的 block 返回数据

sql - 在 Windows 8 中卸载 SQL Server Management Studio 2014

asp.net-mvc - Visual Studio 2010 未发布所有 App_Data

.net - .Net Framework 4 上的可移植类库和 MVVM 支持

elasticsearch - 带脚本的 Elastic NEST SumAggregation

asp.net - 导出Excel前添加标题

c# - 使用 ArraySegment 类到 JSON 对象