2

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

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

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

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

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

4

2 回答 2

10

您正在使用的 FileStream 构造函数以读取和写入权限打开文件。请参阅文档的备注部分:

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

您需要使用带有 FileAccess.Read 作为第三个参数的三参数构造函数。

像这样:

using (Stream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
于 2012-07-25T17:11:23.327 回答
2

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

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

using (StreamReader reader = new StreamReader(filename))
{
   configSettings= (MyConfigSettings)xmlSerializer.Deserialize(reader);
}
于 2012-07-27T00:58:01.907 回答