c# – 以事务方式删除目录中的所有文件和文件夹

这与
this question类似,但还有一个要求:

由于删除文件可能因任何原因而失败.所以我希望操作“交易”,这意味着整个操作要么全部成功,要么失败并且根本不做任何改变.

一般来说,这将是非常非常困难的,当物理硬盘突然断裂时,我看不到任何恢复的可能性.所以一个弱化的条款是:如果成功,我们就完成了.否则,如果失败,请尽可能将所有内容恢复到原始状态.

我能想到的某种错误是:

>访问冲突.您根本不允许删除某些文件或文件夹.这是我想要处理最多的情况.
>文件/文件夹被其他人使用,因此它被“锁定”.在Linux中,这不是问题,但在Windows中它是.这也是要处理的.
>如果是网络文件夹,则可能存在网络问题.恢复可能很难或不可能.我不希望这种错误得到妥善处理.
>硬件故障.我认为这里不会发生任何恢复.

脚本

您有一个可以导出其内部数据的软件.结果是在一个文件夹中,并且子文件夹名称带有时间戳.

现在,如果用户指定了一个非空的文件夹(可能是以前的输出文件夹),软件将在其上创建新的子文件夹,这是一个质量.因此,您希望在执行导出之前确保文件夹为空.

如果没有,您可以轻松检测文件夹空白并提醒用户.但是,如果用户说“继续做”,那么你应该做点什么.现在,如果您删除了某些文件而其他文件失败了怎么办?

在这种情况下继续前进只会造成更糟糕的质量.同时,如果没有任何工作,用户不会期望损坏的文件夹.因此,最好是给它们一个完全正常工作的输出,或者根本不改变以前的输出.

最佳答案 根据评论,我会给你编写代码的过程的伪代码:

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
点赞