我有一个将对象保存到文件中的方法。对象被修改并保存多次。问题是当我试图将对象第二次保存到同一个文件中时,我得到的是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 :(得分:4)
MSDN说FileMode.Create
:
指定操作系统应创建新文件。如果 文件已存在,将被覆盖。这需要 FileIOPermissionAccess.Write权限。 FileMode.Create是等效的 要求如果文件不存在,请使用CreateNew; 否则,请使用截断。 如果文件已存在但是隐藏了 文件,抛出UnauthorizedAccessException异常。
这正是你所看到的。所以解决方案似乎是使用不同的模式,或者在评论中建议,取消隐藏 - >保存 - >隐藏。