【问题标题】:File recovery when app crashes C#应用程序崩溃时的文件恢复 C#
【发布时间】:2012-10-25 05:07:21
【问题描述】:

我正在创建一个 WPF/C# 应用程序,它会在关闭之前删除文件并创建新文件(来自在线数据)。当应用程序在新文件创建过程完成甚至开始之前随机崩溃时,就会出现问题。

是否可以在我的代码中使用文件恢复方法(在应用程序内完成,而不仅仅是取消删除应用程序等),这样当应用程序崩溃时,被删除的文件不会丢失?

为了更准确,我在应用程序开始时删除了 4 个文件,并在应用程序结束时创建新文件。但是如果应用程序在中间崩溃,文件就会丢失。

如何防止这个问题?

我试图降低随机崩溃的可能性,但偶尔它仍然会发生。

【问题讨论】:

  • 解决方法是只在新文件完成后删除文件。
  • 我必须先删除然后找到新文件,因为它们以相同的名称下载(它们必须是这样,它是类项目),因此必须在创建新文件之前重命名/删除它们等一个

标签: c# wpf data-recovery crash


【解决方案1】:

如果您担心文件丢失,您可以:

  • 启动删除A.txt(比如说)之前创建它的副本A.tmp,然后删除。
  • 关闭时,创建新文件并删除目录中存在的所有tmp 文件。

这样,如果程序运行过程中出现问题,当程序再次启动时,它会找到最后创建的tmp,因此可以从中重构信息(如果需要)并继续程序循环.

【讨论】:

    【解决方案2】:

    在启动时,对文件不做任何事情。

    关闭时,请按照以下步骤操作:

    1. 创建新文件,命名为OLDNAME.tmp 或其他名称。如果它已经存在,请丢弃并重新创建它。
    2. 通过MoveFileTransacted() (MSDN) 将新文件重命名为旧文件

    如果您被困在没有MoveFileTransacted() 的旧版 Windows 上,事情会变得更加复杂:http://blogs.msdn.com/b/adioltean/archive/2005/12/28/507866.aspx


    注意:如果您发现自己在一个 POSIX 兼容的文件系统上,标准的重命名操作保证是原子的,使第 2 步变得微不足道。

    【讨论】:

      【解决方案3】:

      考虑将文件移动到某个临时文件夹,而不是删除它们。您可以发明一些取消删除技术,但这并不可靠,因为文件系统可以随时重写未占用的空间。新文件到达后,您将删除之前移动的文件。

      【讨论】:

        【解决方案4】:

        在创建新文件之前不要删除旧文件?而是重命名它们。当您启动应用程序时,您会知道它是否崩溃,因为旧的(重命名的)文件仍然存在,然后您可以执行任何整理操作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-09-02
          • 2017-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多