C# C语言中xml文件的同步编辑#

C# C语言中xml文件的同步编辑#,c#,xml,linq-to-xml,overwrite,C#,Xml,Linq To Xml,Overwrite,我正在开发一个应用程序,它读取和编辑xml文件,但使用XDocument类Load()和Save()方法。如果另一个应用程序或我的应用程序的另一个实例正在运行,那么一个文档可能会覆盖另一个文档所做的更改,如果它在内存中,xdocument没有持续更新(重新加载)。同时运行的程序永远不会同时编辑xml文件的同一部分。解决这个问题的最好办法是什么?我应该在做每一个改变之前先做一次加载,还是有更优雅的方法 最好的解决方案是不使用XML 使用(小型)数据库 在多用户情况下使用任何类型的文本文件都是非常困

我正在开发一个应用程序,它读取和编辑xml文件,但使用XDocument类Load()和Save()方法。如果另一个应用程序或我的应用程序的另一个实例正在运行,那么一个文档可能会覆盖另一个文档所做的更改,如果它在内存中,xdocument没有持续更新(重新加载)。同时运行的程序永远不会同时编辑xml文件的同一部分。解决这个问题的最好办法是什么?我应该在做每一个改变之前先做一次加载,还是有更优雅的方法

最好的解决方案是不使用XML

使用(小型)数据库

在多用户情况下使用任何类型的文本文件都是非常困难的,而且只有在具有固定长度和(因此)固定位置记录(行)的情况下,才能将其用于不同的部分。XML不能提供这一点


在编辑之前加载只会减少问题出现的频率。更改总是有可能丢失,您将在文件系统级别遇到竞争条件。要使其工作,您必须使用带有锁定文件的方案。为此,您需要一个额外的文件。

您所说的是多个进程可以修改该文件。如果要保留文件而不是将数据放入公共存储(MS SQL),则需要实现互斥锁,以确保在任何时候只有一个应用程序可以访问文件。

编辑时是否可以锁定文件,或者可能是使用文件的单个实例???@Priya10单个实例不能保证线程安全。@pnya:锁定文件没有帮助,您需要在某个时候解锁。像sqlite一样,它有一个ado.net数据提供程序:@Femaref此应用程序将部署在许多机器上。在目标计算机上安装sqlite并创建数据库的过程有多困难?@Femaref我的程序的大小会增加多少?您也可以使用SQL Server Express或Compact Edition,以获得比SQLLite更强大的功能。@Jordan:这(sqlite/sqlce/…)以前有人问过。如果你找不到什么,搜索网站并发布新问题。