这与 this question 类似但还有一个要求:
因为无论什么原因,文件删除都可能失败。所以我希望操作被“处理”,这意味着整个操作要么完全成功,要么失败并且根本不改变任何东西。
一般来说,这会非常非常困难,当物理硬盘突然损坏时,我看不出有任何恢复的可能性。因此,弱化条款将是:如果成功,我们就结束了。否则,如果失败,请尽可能将所有内容恢复到原始状态。
我能想到的一些错误是:
访问冲突。您根本不允许删除某些文件或文件夹。这是我最想处理的情况。
文件/文件夹已被其他人使用,因此被“锁定”。在 Linux 中这不是问题,但在 Windows 中却是。这也是要处理的。
如果它是网络文件夹,则可能存在网络问题。恢复可能很困难或不可能。我不希望这种错误得到妥善处理。
硬件故障。我认为这里不会发生任何恢复。
场景
您有一个可以导出其内部数据的软件。结果在一个文件夹中,子文件夹名称带有时间戳。
现在如果用户指定了一个不为空的文件夹(可能是之前的输出文件夹),软件会在它上面创建新的子文件夹,这是一个mass。因此,您要在执行导出之前确保该文件夹为空。
您可以轻松检测文件夹是否为空,如果没有则提醒用户。但是,如果用户说“继续做”,那么您应该做点什么。现在,如果您删除了一些文件而在其他文件上失败了怎么办?
在这种情况下继续前进只会产生更糟糕的质量。同时,用户不会期望损坏的文件夹无法正常工作。所以最好要么给他们一个完整的工作输出,要么根本不改变以前的输出。
最佳答案
根据评论,我将为您提供编写代码过程的伪代码:
Clear contents of cache folder if any files exist (they shouldn't)
Copy contents of destination folder to cache folder
Try
While files exist, iterate
Delete file
End While
Catch
While files exist in cache, iterate
If file does not exist in destination folder
Move file from cache to destination
else
Delete file from cache
end If
End While
End Try
关于c# - 以事务方式删除目录中的所有文件和文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30114193/