ASP.NET 使用 FileStream (FileMode.Open) 读取 xml -> System.UnauthorizedAccessException

Posted

技术标签:

【中文标题】ASP.NET 使用 FileStream (FileMode.Open) 读取 xml -> System.UnauthorizedAccessException【英文标题】:ASP.NET Reading xml with FileStream (FileMode.Open) -> System.UnauthorizedAccessException 【发布时间】:2012-07-02 11:34:23 【问题描述】:

我有一个从 xml 配置文件中读取设置的网站(我使用的是 .config 扩展名)。我像这样打开文件:

XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));

using (Stream fs = new FileStream(filename, FileMode.Open))

     configSettings = xmlSerializer.Deserialize(fs) as MyConfigSettings;

我只需要对该文件的读取权限,但由于某种原因,除非我授予该文件的写入权限,否则我会收到 System.UnauthorizedAccessException。这是我不想做的事情,只是代码读取文件时需要的。

为什么会发生这种情况,我应该改变什么来阻止这种情况发生?

【问题讨论】:

如果您希望人们再次帮助您,您需要接受答案。我相信 jpmc26 有最好的答案。 【参考方案1】:

我使用 StreamReader 解决了这个问题:

XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));

using (StreamReader reader = new StreamReader(filename))

   configSettings= (MyConfigSettings)xmlSerializer.Deserialize(reader);

【讨论】:

这不是回答问题,只是解决你自己的问题。 除非我的编译器与其他人的不同,否则它是 Panko 先生问题的有效答案。【参考方案2】:

您使用的 FileStream 构造函数以读取和写入权限打开文件。见documentation的备注部分:

对于没有 FileAccess 参数的构造函数,如果 mode 参数设置为 Append,则 Write 是默认访问。否则,访问权限设置为 ReadWrite。

您需要使用 three argument constructor 和 FileAccess.Read 作为第三个参数。

像这样:

using (Stream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))

【讨论】:

谢谢。我最终使用了完成相同工作的 StreamReader。

以上是关于ASP.NET 使用 FileStream (FileMode.Open) 读取 xml -> System.UnauthorizedAccessException的主要内容,如果未能解决你的问题,请参考以下文章

asp.net中大文件下载

如何在新选项卡或窗口中打开 PDF 文件而不是下载它(使用 asp.net)?

asp.net中如何保存图片对象

如何在 ASP.NET Core 中返回存储为 byte[] 的文件?

ASP.Net中上传文件的几种方法

如何使用Sqlserver 2012 Always on技术