c# - 为什么在 System.IO 的 Directory 类中有 Move 方法,但没有 Copy 方法?

标签 c# .net

正如标题所说,有一个 Directory.Move但在 Directory 中没有 Directory.Copy 方法来自 System.IO 的类。这是有原因的吗?

更新:

对我来说,复制和移动操作几乎相同,唯一的区别是移动操作执行复制然后删除目标。移动和复制的错误处理一样复杂。那么,如果实现了一个,为什么另一个没有实现?

更新 2:

引用自 mmclean 的评论:

Directory.Move however does not move, it renames. Thus the "destination" path is a full path to point to the directory, rather than a location to "move into", and moving to a different drive is impossible.

所以我明白移动实际上做了一个重命名操作(只改变和进入文件分配表)。但是移动和复制命令都存在合并目标中现有项目的相同问题(覆盖/保留两者)。因此,复制操作唯一增加的复杂性是它必须物理地复制文件。但这仍然不能解释不实现它的决定。更重要的是,当复制命令在 VB.NET 中实现时,MSDN 上有一个非常简单的复制操作实现 here .

最佳答案

实用的答案是,没有用于复制目录的 Windows API 调用,而用于移动(也称为重命名)目录的 Windows API 调用 (MoveFile())。

Directory.Move() 调用 MoveFile() 作为其实现的一部分。但是没有什么可以要求复制的。

他们似乎保持了与 Windows API 提供的接口(interface)大致相似的接口(interface)。

此外,目录复制失败的错误处理非常糟糕。它必须回滚任何更改吗?如何处理失败的副本将非常依赖于上下文,以至于很难有一个通用的方法。这可能就是为什么也没有 Windows API 调用来复制目录的原因。

另一件可能导致复杂性增加的事情是在复制过程中不同的文件被锁定,以及在复制发生时从目录中添加和删除文件。

(尽管如此处的另一个答案所述,有一种 Visual Basic 方法可以复制目录,它必须解决其中的一些问题。)

关于c# - 为什么在 System.IO 的 Directory 类中有 Move 方法,但没有 Copy 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18533536/

相关文章:

c# - 为什么我的 xml 文档被视为一个元素?

c# - 使用 IF 语句处理 Enter 键

c# - WPF DataGrid中如何通过DataGrid Header CheckBox选中一列的所有CheckBox

c# - 从 FlexLayout 中移除额外的空间

c# - Stream.Length 抛出 NotSupportedException

.net - 变量名称模型绑定(bind)器中的 Web Api Dash

.net - 如何限制 .net/mono 进程的内存大小

C# 二进制常量表示

.net - Silverlight 安全吗?

c# - X509Store Certificates.Find FindByThumbprint