【问题标题】:C# Compact Framework - File manipulation from two different programsC# Compact Framework - 来自两个不同程序的文件操作
【发布时间】:2015-02-26 20:47:33
【问题描述】:

问题描述

我正在使用 .NET v3.5 Compact Framework 为移动设备开发 C# 应用程序。我目前有两个程序,用户使用它们来向(或从)XML 文件读取或写入数据。问题是当我尝试从两个程序中的任何一个打开文件时,然后尝试使用另一个程序来操作文件。

发生了什么事?

两个程序都在读取和解析 XML 文件。那时,它们成为内存中的两个独立实体。这两组数据都在程序运行中的某个时间点发生了变化。程序 #1 保存更改。程序 #2 也会保存更改,但不会有程序 #1 的更改。

我该怎么办?有什么建议吗???

我需要有关如何解决此问题的帮助。我应该将这两个程序合并到同一个解决方案中吗?我应该如何让两个单独的程序操作同一个文件并更新彼此的数据?

【问题讨论】:

  • 所以你想在两个程序之间共享数据?一个程序的信息会影响另一个程序的工作吗?
  • @lucrativelucas 是的,确实如此。它们都从同一个文件中提取信息,并且当(例如)属性 a 的一个值发生更改时,我希望程序保存属性 a 并导致另一个程序更新更改。

标签: c# file-io .net-3.5 synchronization compact-framework


【解决方案1】:

a) 使用单独的锁文件,只要一个进程访问该文件进行写入 b) 使用一个新进程,它是 xml 的唯一接口。使用一些进程间技术来管理 xml 的数据(即使用套接字)。 c) 不再使用 xml 来处理数据,而是使用 SQLite 等多用户和可交易的数据库系统。

我会选择 c)

【讨论】:

  • 我不能使用选项“C”的不幸原因是该程序的用户中很少有人无法访问互联网连接。不过,我确实喜欢选项“B”,并且觉得这个答案有很多深度。谢谢。
  • 使用 SQLite 不需要互联网连接。 SQLite 是一个非常小的只有 SQL 文件的数据库系统。
【解决方案2】:

定期检查文件(当您的应用程序获得输入焦点时,或在计时器上,或在覆盖文件之前)以查看内容是否已更改。如果是这样,程序将需要重新加载文件并将更改与内存中的活动实体合并。可能会发生冲突(即另一个程序更改了实体的一部分,而您的程序也更改了该部分),因此您需要检查这些并采取适当的措施,无论是警告用户还是只允许更新的更改为应用。

检测更改的最佳方式取决于您的数据的结构以及您的 XML 文件的元素是否可以被唯一标识。不幸的是,如果您还没有编写比较代码,这可能不是一项简单的任务。

【讨论】:

  • 感谢您的帮助和指导。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
  • 2012-04-01
相关资源
最近更新 更多