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);

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

4

1 回答 1

4

MSDN这样说FileMode.Create

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

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

于 2013-08-07T17:33:35.453 回答