1

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

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

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

我怎样才能防止这个问题?

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

4

4 回答 4

3

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

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

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

于 2012-11-05T11:12:48.047 回答
2

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

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

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

如果您被困在没有MoveFileTransacted().


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

于 2012-11-05T11:14:58.637 回答
1

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

于 2012-11-05T11:11:27.053 回答
0

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

于 2012-11-05T11:09:57.173 回答