当应用程序的多个实例完全同时使用StreamWriter访问同一文件时,会发生什么情况?

时间:2018-10-07 22:07:27

标签: c# .net file authentication streamwriter

我有一个可以同时被多个用户使用的应用程序。该应用程序使用API​​,并且其令牌需要不时刷新。令牌保存在文件中。当需要刷新令牌时,文件将被新令牌覆盖。我担心的是,在极少数情况下,应用程序的两个实例可能会尝试在完全相同的时间写入文件。那会发生什么呢?我想避免出现一个空文件的情况。

我已经阅读了其他相关问题,并且看到“操作系统会安排它们”和“一切都会发生”。是哪一个?

如果有帮助,这里是有问题的5行。另外,这目前还没有在单独的线程上发生。

{
"ComputerLocalGroupsCurrent":[{"Groupname":"Access Control Assistance Operators", "LocalGroupId":11}]
}

2 个答案:

答案 0 :(得分:1)

文件将具有最后一个编写者写入的内容。给作者FileShare.ReadWrite允许多个作者使用它:

string newTokens = GetTokens();
using (StreamWriter writer = new StreamWriter("TokensFile.txt", FileMode.Create, FileAccess.Write, FileShare.Readwrite)) {
    writer.Write(newTokens));
    writer.Flush();
    writer.Close();
}

答案 1 :(得分:0)

您只需要有一个关键部分,可确保一次只有一个应用程序实例访问文件。您可以使用Mutex来做到这一点,因为它们可以定义为机器范围的,因此可以在不同进程之间共享。

启动时,您的应用程序将创建/打开Mutex。然后,当您需要访问文件时,等待捕获互斥锁,先执行文件工作,然后释放互斥锁。如果您的应用程序崩溃,则操作系统会自动释放互斥量。因此,它既好又安全又易于使用。