gpt4 book ai didi

c# - 在 Web 应用程序中锁定 XML 文件

转载 作者:行者123 更新时间:2023-11-30 21:01:17 25 4
gpt4 key购买 nike

我们有一个充当表单设计器的网站应用程序。

表单数据存储在 XML 文件中。每个表单都有自己的 xml 文件。

当我编辑表单时,我基本上是重新创建 XML 文件。

public void Save(Guid form_Id, IEnumerable<FormData> formData)
{
XDocument doc = new XDocument();
XElement formsDataElement = new XElement("FormsData");
doc.Add(formsDataElement);
foreach (FormData data in formData)
{
formsDataElement.Add(new XElement("FormData",
new XAttribute("Id", data.Id)
new XAttribute("Name", data.Name)
// other attributes
));
}

doc.Save(formXMLFilePath);
}

这很好用,但我想确保两个用户不会同时更新 XML 文件。我想以某种方式锁定它。

如何单独锁定每个文件的保存过程?

我可以像下面那样锁定保存功能,但这会锁定所有用户,即使他们保存了不同的 XML 文件也是如此。

private static readonly object _lock = new object();
public void Save(Guid form_Id, IEnumerable<FormData> formData)
{
lock(_lock)
{
XDocument doc = new XDocument();
foreach (FormData data in formData)
{
// Code
}

doc.Save(formXMLFilePath);
}
}

最佳答案

为了防止同时写入文件,XDocument.Save 方法在内部使用以下构造函数创建了一个 FileStream:

new FileStream(
outputFileName,
FileMode.Create,
FileAccess.Write,
FileShare.Read,
0x1000,
UseAsync)

选项 FileShare.Read 可防止同时发生多个写入。如果您尝试同时执行两次写入,您最终会抛出 IOException

您可能想编写一些代码来处理这种可能发生的情况。本回答https://stackoverflow.com/a/50800/138578应准确提供如何处理被锁定的文件并重试直到文件可用。

如果您的文档又小又多,您不应该经常遇到这种情况,如果有的话。

关于c# - 在 Web 应用程序中锁定 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14316700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com