tldr;如果应用程序的多个用户/实例同时将File.WriteAllText()调用到同一文件路径,将会发生什么?调用将引发异常,调用将引发异常并损坏文件,调用将“成功”但仍可能损坏文件,操作系统将调度一个发生在另一个之后还是其他事情发生? >
我们有一个应用程序,每次他们使用我们应用程序的主要功能时都会保存配置设置。每次将配置保存到应用程序的安装文件夹中,并保存到相同的路径。现在,我们有一个客户端,希望有多个用户从同一安装路径运行该应用程序。如果冲突导致配置不保存,那不是问题,但是如果冲突导致损坏,那就不方便了。我只需要知道调用损坏文件而不引发错误的可能性?
任何帮助或与资源的链接将不胜感激,我在寻找时找不到任何东西。
预先感谢
编辑: 使用FileStream和FileShare.Read,如果另一个用户尝试在写入过程中读取文件,他会获得该文件的早期版本吗?还是会得到不完整的文件?这不是要写入的大文件,但是是否有必要将其设置为FileShare.None并向文件中添加重试。是否也可以读取?
答案 0 :(得分:0)
事实证明,它会产生一个异常(我运行了该应用程序的四个实例,并同时关闭了它们的所有实例,除了一个实例,所有实例都抛出了异常),File.WriteAllText()似乎锁定了文件。为了安全起见,FileStream似乎提供了显式执行此操作的功能
using (FileStream writer = new FileStream(filepath, FileMode.Create, FileAccess.Write, FileShare.Read)) {
writer.Write(jsonString));
writer.Flush();
}