作者:小鬼快乐momomo | 来源:互联网 | 2023-10-11 12:02
MemoryMappedFile.CreateFromFile始终抛出UnauthorizedAccessException我意识到.NET4.0处于测试阶段,但我希望有人能够解决
MemoryMappedFile.CreateFromFile始终抛出UnauthorizedAccessException
我意识到.NET 4.0处于测试阶段,但我希望有人能够解决这个问题。 我正在尝试从DLL创建一个内存映射文件:
FileStream file = File.OpenRead("C:mydll.dll"); using (MemoryMappedFile mappedFile = MemoryMappedFile.CreateFromFile(file, "PEIMAGE", 1024 * 1024, MemoryMappedFileAccess.ReadExecute)) { using (MemoryMappedViewStream viewStream = mappedFile.CreateViewStream()) { // read from the view stream } }
不幸的是,无论我做什么,我总是得到一个UnauthorizedAccessException
, MSDN文档说明了这一点:
操作系统拒绝指定的文件访问权限; 例如,access设置为Write或ReadWrite,但文件或目录是只读的。
我用Sysinternals Process Monitor监视我的应用程序,它显示该文件确实正在成功打开。 我也尝试了内存映射其他非DLL文件,但结果相同。
好吧,我有一个基于上面的例子,没有例外。 我做了两个重要的改变:
完整计划:
using System.IO; using System.IO.MemoryMappedFiles; class Test { static void Main() { FileStream file = File.OpenRead("Test.cs"); using (MemoryMappedFile mappedFile = MemoryMappedFile.CreateFromFile (file, "PEIMAGE", file.Length, MemoryMappedFileAccess.Read, null, 0, false)) { using (var viewStream = mappedFile.CreateViewStream (0, file.Length, MemoryMappedFileAccess.Read)) { // read from the view stream } } } }
调用CreateViewAccessor(…)方法时,我有相同的行为。
事实certificate,只有当size参数超出文件的长度时才会抛出错误(这与我们习惯使用的大小是最大值的流的行为不同,相反它似乎将参数作为文字和结果是尝试读取文件的末尾)。
我通过检查大小是否超过打开文件的大小来修复我的问题。
上述就是C#学习教程:MemoryMappedFile.CreateFromFile始终抛出UnauthorizedAccessException分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记