我正在创建一个WPF / C#应用程序,它会在关闭之前删除文件并创建新文件(来自在线数据)。当应用程序在新文件创建过程完成或甚至开始之前随机崩溃时,会出现问题。
有没有一种方法可以在我的代码中使用文件恢复(在app中完成,而不仅仅是取消删除应用程序等),这样当应用程序崩溃时,删除的文件不会丢失?
为了更准确,我删除应用程序开头的4个文件,并在应用程序结束时创建新文件。但如果应用程序在中间崩溃,文件就会丢失。
如何防止此问题?
我试图减少随机崩溃的可能性,但偶尔会发生这种情况。
答案 0 :(得分:3)
如果您对丢失文件感到担心,您可以:
A.txt
(比如说)之前,先创建它的副本A.tmp
,然后删除。 tmp
个文件。通过这种方式,如果在程序运行期间出现问题,当程序再次启动时,它会找到最后创建的tmp
,因此可以从它们重建信息(如果需要)并继续程序周期。
答案 1 :(得分:2)
启动时,不对文件执行任何操作。
关闭时,请按照以下步骤操作:
OLDNAME.tmp
的新文件。如果它已经存在,则丢弃并重新创建它。MoveFileTransacted()
(MSDN)如果您遇到没有MoveFileTransacted()
的旧版Windows,事情会变得更加复杂:http://blogs.msdn.com/b/adioltean/archive/2005/12/28/507866.aspx
注意:如果您发现自己处于符合POSIX标准的文件系统,标准重命名操作将保证是原子的,这使得第2步变得微不足道。
答案 2 :(得分:1)
考虑将文件移动到某个临时文件夹,而不是删除它们。您可以发明一些取消删除技术,但这不可靠,因为文件系统可以随时重写未占用的空间。新文件到达后,您将删除以前移动的文件。
答案 3 :(得分:0)
在创建新文件之前,不要删除旧文件吗?改为将它们重新命名。当你启动应用程序时,你会知道它是否崩溃,因为旧的(重命名的)文件仍然在那里,你可以执行任何整理操作。