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的主要内容,如果未能解决你的问题,请参考以下文章
如何在新选项卡或窗口中打开 PDF 文件而不是下载它(使用 asp.net)?