Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 应用程序崩溃时的文件恢复#_C#_Wpf_Data Recovery_Crash - Fatal编程技术网

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

C# 应用程序崩溃时的文件恢复#,c#,wpf,data-recovery,crash,C#,Wpf,Data Recovery,Crash,我正在创建一个WPF/C应用程序,在关闭之前删除文件并创建新文件(从在线数据)。当应用程序在新文件创建过程完成甚至开始之前随机崩溃时,就会出现问题 是否有一种文件恢复方法(在应用程序内完成,而不仅仅是取消删除应用程序等)可以在我的代码中使用,以便当应用程序崩溃时,删除的文件不会丢失 更准确地说,我在应用程序开始时删除了4个文件,并在应用程序结束时创建了新文件。但是如果应用程序在中间崩溃,文件就会丢失。 我如何防止这个问题 我试图降低随机碰撞的概率,但偶尔还是会发生 在创建新文件之前不要删除旧文件

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

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

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


我试图降低随机碰撞的概率,但偶尔还是会发生

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

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

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

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

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

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

这样,如果在程序运行期间出现问题,当程序再次启动时,它将找到上次创建的
tmp
,因此可以从中重建信息(如果需要)并继续程序循环。

如果您对文件丢失持谨慎态度,您可以:

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

这样,如果在程序运行期间出现问题,当程序再次启动时,它将找到上次创建的
tmp
,因此可以从中重建信息(如果需要)并继续程序循环。

启动时,对文件不做任何操作

关闭时,遵循以下步骤:

  • 创建名为
    OLDNAME.tmp
    或其他的新文件。如果它已经存在,请放弃并重新创建它
  • 通过
    movefiletransact()
    ()将新文件重命名为旧文件
  • 如果您停留在旧版本的Windows上,而没有
    moveFileTransact()
    ,事情会变得更加复杂:



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

    启动时,对文件不做任何操作

    关闭时,遵循以下步骤:

  • 创建名为
    OLDNAME.tmp
    或其他的新文件。如果它已经存在,请放弃并重新创建它
  • 通过
    movefiletransact()
    ()将新文件重命名为旧文件
  • 如果您停留在旧版本的Windows上,而没有
    moveFileTransact()
    ,事情会变得更加复杂:



    注意:如果您发现自己使用的是符合POSIX标准的文件系统,那么标准的重命名操作将保证是原子的,这使得步骤2变得很简单。

    解决方案是只在新文件完成后删除这些文件。我必须先删除这些文件,然后在下载时查找同名的新文件(这就是它们必须是的方式,这是类项目)因此在创建新文件之前必须重命名/删除它们。解决方案是仅在新文件完成后删除这些文件。我必须先删除这些文件,然后在下载时查找同名的新文件(这就是它们必须是的方式,这是类项目)因此,在创建新文件之前,必须重命名/删除这些文件