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

标签 c# .net

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

因为无论什么原因,文件删除都可能失败。所以我希望操作被“处理”,这意味着整个操作要么完全成功,要么失败并且根本不改变任何东西。

一般来说,这会非常非常困难,当物理硬盘突然损坏时,我看不出有任何恢复的可能性。因此,弱化条款将是:如果成功,我们就结束了。否则,如果失败,请尽可能将所有内容恢复到原始状态。

我能想到的一些错误是:

  1. 访问冲突。您根本不允许删除某些文件或文件夹。这是我最想处理的情况。

  2. 文件/文件夹已被其他人使用,因此被“锁定”。在 Linux 中这不是问题,但在 Windows 中却是。这也是要处理的。

  3. 如果它是网络文件夹,则可能存在网络问题。恢复可能很困难或不可能。我不希望这种错误得到妥善处理。

  4. 硬件故障。我认为这里不会发生任何恢复。

场景

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

现在如果用户指定了一个不为空的文件夹(可能是之前的输出文件夹),软件会在它上面创建新的子文件夹,这是一个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/

相关文章:

c# - 基于需要在执行时间内接收更多项目的列表执行 Parallel.ForEach

C#.NET : How to create self data relationship on single DataTable?

c# - 从 aspx 页面上的按钮调用类

.net - ASP.Net 移动 Web 表单发生了什么?

内联方法调用和单独方法调用之间的 C# 编译器类型推断区别

c# - 创建一个完成的 Task<T>

.net - 在 Win7 中使用不带注册表的 COM Exe 服务器

c# - 查找图像类型(gif、bmp、jpg 等)的预览处理程序 GUID

c# - 如何使用匿名对象创建动态 Linq Select 表达式

c# - 使用 ASP.net C# 读取文本文件和操作数据