2013-08-07 61 views
2

我有一个将对象保存到文件中的方法。该对象被修改并保存多次。问题是,当我试图将对象第二次保存到同一个文件时,我得到了UnautorizedAccessException。下面是代码:设置属性后文件被锁定

public void Save(string path) 
{ 
      string fileName = String.Format("{0}\\{1}", path, DataFileName); 
      using (FileStream fs = new FileStream(fileName, FileMode.Create)) 
      { 
       BinaryFormatter formatter = new BinaryFormatter(); 
       formatter.Serialize(fs, this); 
       File.SetAttributes(fileName, FileAttributes.Hidden); 
      } 
} 

什么是最有趣的是,如果我评论的线

File.SetAttributes(fileName, FileAttributes.Hidden); 

问题就消失了。怎么会?我该如何解决这个问题?

+0

您是否关闭第一次保存的流? – Botonomous

+0

反正你的'SetAttributes()'调用不应该在''using'之外吗? – itsme86

+0

取消隐藏,保存,重新隐藏。 –

回答

4

MSDN说,这大约FileMode.Create

指定操作系统应创建一个新的文件。如果 文件已经存在,它将被覆盖。这需要 FileIOPermissionAccess.Write权限。 FileMode.Create相当于 要求如果该文件不存在,使用CreateNew; 否则,请使用截断。 如果该文件已存在但是隐藏文件 ,则会引发UnauthorizedAccessException异常。

这正是你所看到的。因此,解决方案似乎要么使用不同的模式,要么按照评论中的建议,取消隐藏 - >保存 - >隐藏。

+1

谢谢,现在工作正常。 RTFM问题=) – KorsaR