【问题标题】:Saving XML file “on the fly” in c#在 C# 中“即时”保存 XML 文件
【发布时间】:2020-04-06 05:59:27
【问题描述】:

我正在开发一个用户可以输入一些文本的应用程序。文本保存到 XML 文件中,我尝试在用户键入时“即时”保存文件,以便立即保存。但是,如果快速输入数据,我会收到“文件当前正在使用”的错误。如何克服这个问题?

【问题讨论】:

  • 能否请您出示您的代码以便我们提供帮助?
  • 问题是在输入下一个字母之前文件没有完成保存,它会再次尝试保存文件。在每个字母上一遍又一遍地保存文件似乎有很多不必要的处理能力......如果文本发生变化,最好每 X 秒保存一次。
  • 是的,我知道它为什么会发生,但我试图找到解决方法。也许计时器是一种选择。
  • IO 需要时间。比你的代码更多的时间。改为使用队列系统进行更改。
  • 听起来您在每次击键时都会触发保存。那是多余的。在 X 秒内没有任何击键后,您应该执行类似触发保存的操作。但是,为了使这个问题成为 StackOverflow 上的有效问题,您需要包含 minimal reproducible example 并展示您解决问题的尝试。看看How to Ask

标签: c# xml file save


【解决方案1】:

这个错误的原因是你试图写一个文件,而之前的写操作是不完整的,并且文件仍然是打开写的。

现在,如果您绝对必须对每个字符更改进行写入 - 我会放入队列中,因此当 XML 内容更改时 - 而不是立即写入文件 - 将消息添加到队列中。然后拥有监控该队列的代码,并且只有在前一次写入完成后才写入下一次更改。

【讨论】:

    【解决方案2】:

    您可以尝试放置一个标志来控制文件是否已经打开。如果它是打开的,您保留文本并且不要在 XML 上编写,但如果不是,您只需编写。

    这是一个并发问题,您可以访问该网站:https://www.oreilly.com/library/view/concurrency-in-c/9781491906675/ch01.html 以获取更多选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 2017-08-20
      • 1970-01-01
      • 2020-03-26
      • 2012-02-26
      • 2011-10-10
      相关资源
      最近更新 更多