应用程序崩溃C#时的文件恢复

时间:2012-11-05 11:07:24

标签: c# wpf data-recovery crash

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

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

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

如何防止此问题?

我试图减少随机崩溃的可能性,但偶尔会发生这种情况。

4 个答案:

答案 0 :(得分:3)

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

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

通过这种方式,如果在程序运行期间出现问题,当程序再次启动时,它会找到最后创建的tmp,因此可以从它们重建信息(如果需要)并继续程序周期。

答案 1 :(得分:2)

启动时,不对文件执行任何操作。

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

  1. 创建名为OLDNAME.tmp的新文件。如果它已经存在,则丢弃并重新创建它。
  2. 通过MoveFileTransacted()MSDN
  3. 重新命名旧文件

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


    注意:如果您发现自己处于符合POSIX标准的文件系统,标准重命名操作将保证是原子的,这使得第2步变得微不足道。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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