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

时间:2012-07-02 02:11:15

标签: asp.net permissions filestream file-permissions

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

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

using (Stream fs = new FileStream(filename, FileMode.Open))
{
     configSettings = xmlSerializer.Deserialize(fs) as MyConfigSettings;
}

我只需要对该文件的读访问权,但由于某种原因,我得到一个System.UnauthorizedAccessException,除非我对该文件赋予写权限。这是我不想做的事情,只有代码才能读取文件。

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

2 个答案:

答案 0 :(得分:10)

您正在使用的FileStream构造函数打开具有读写权限的文件。请参阅documentation的备注部分:

  

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

您需要将three argument constructor与FileAccess.Read一起用作第三个参数。

像这样:

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

答案 1 :(得分:2)

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

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

using (StreamReader reader = new StreamReader(filename))
{
   configSettings= (MyConfigSettings)xmlSerializer.Deserialize(reader);
}