设置属性后文件被锁定

时间:2013-08-07 17:25:12

标签: c# .net

我有一个将对象保存到文件中的方法。对象被修改并保存多次。问题是当我试图将对象第二次保存到同一个文件中时,我得到的是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);

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

1 个答案:

答案 0 :(得分:4)

MSDNFileMode.Create

  

指定操作系统应创建新文件。如果   文件已存在,将被覆盖。这需要   FileIOPermissionAccess.Write权限。 FileMode.Create是等效的   要求如果文件不存在,请使用CreateNew;   否则,请使用截断。 如果文件已存在但是隐藏了   文件,抛出UnauthorizedAccessException异常。

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