如果多个用户同时在同一位置调用C#File.writealText,会发生什么情况?

如果多个用户同时在同一位置调用C#File.writealText,会发生什么情况?,c#,C#,tldr;如果一个应用程序的多个用户/实例同时将File.WriteAllText()调用到同一文件路径,会发生什么情况?调用是否会引发异常,调用是否会引发异常并损坏文件,调用是否会“成功”但仍可能损坏文件,操作系统是否会安排一个接一个地发生,还是会发生其他事情 我们有一个应用程序,每次使用我们的应用程序的主要功能时,都会保存配置设置。配置将保存到应用程序的安装文件夹中,每次保存到相同的路径。我们现在有一个客户端,它希望有多个用户从同一安装路径运行应用程序。如果冲突导致配置未保存,这不是问题,但

tldr;如果一个应用程序的多个用户/实例同时将File.WriteAllText()调用到同一文件路径,会发生什么情况?调用是否会引发异常,调用是否会引发异常并损坏文件,调用是否会“成功”但仍可能损坏文件,操作系统是否会安排一个接一个地发生,还是会发生其他事情

我们有一个应用程序,每次使用我们的应用程序的主要功能时,都会保存配置设置。配置将保存到应用程序的安装文件夹中,每次保存到相同的路径。我们现在有一个客户端,它希望有多个用户从同一安装路径运行应用程序。如果冲突导致配置未保存,这不是问题,但如果冲突导致损坏,则会带来不便。我只需要知道调用破坏文件而不抛出错误的可能性

如果您能提供任何帮助或链接到资料来源,我将不胜感激,因为我在查找时什么也找不到

提前谢谢

编辑:
使用FielestRAMM和FielsHeal.Read,如果另一个用户试图在写中间读取文件,他会得到文件的早期版本吗?或者他会得到一份不完整的文件?这不是一个正在写入的大文件,但是否需要将其设置为FileShare.None并向file.read添加重试次数?

结果是它产生了一个异常(我运行了四个应用程序实例并同时关闭了它们,只有一个实例抛出了异常),file.writealText()似乎会锁定该文件。不过,为了安全起见,FileStream似乎提供了显式执行此操作的能力

using (FileStream writer = new FileStream(filepath, FileMode.Create, FileAccess.Write, FileShare.Read)) {
    writer.Write(jsonString));
    writer.Flush();
}

“未定义的行为”是我的猜测。我会尝试让想要更新的应用程序先锁定文件。如果成功了,就写,或者说是别人在做。或者重新编写它以避免这个设计缺陷。好吧,您可以通过运行几个线程来更新文件,自己找到答案。但是@DaveS的建议才是正确的方法。重试有多大意义?如果有两个进程覆盖整个文件,那么只有一个赢家:最后写入的那个。如果您有两个应用程序同时写入文件而不考虑另一个的更改,那么谁应该是赢家?如果您想知道它在内部做什么,您只需查看代码即可。深入研究函数调用,您将看到它使用一个
StreamWriter
来写入数据,该数据通过使用
FileShare.Read
FileStream
创建文件,这意味着在调用
writealtext
完成之前,该文件将被锁定以进行写入,为什么它是一个全局配置而不是每个用户?当用户的配置不断意外更改时,使用全局配置是一种很好的方法,可以让用户感到困惑和烦恼。
File.writealText
在内部使用
FileStream
FileShare.Read
选项,因此无需执行此操作。另外,
FileStream
没有采用
string
Write
方法,因此除非
jsonString
byte[]
,否则调用将失败。@Herohtar是正确的。您可以在这里遵循以下链接:,,啊,很高兴知道,这将使代码更简单,可以将其保存为file.writealText,谢谢