5

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

更新:

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

更新 2:

这是来自 mmclean 评论的引述:

Directory.Move 然而不移动,它重命名。因此,“目标”路径是指向目录的完整路径,而不是“移动到”的位置,并且不可能移动到不同的驱动器。

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

4

2 回答 2

5

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

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

他们似乎使界面与 Windows API 提供的界面大体相似。

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

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

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

于 2013-08-30T13:12:27.800 回答
3

不要质疑为什么,只需使用 VB.NET 的CopyDirectory http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.filesystem.copydirectory.aspx

于 2013-08-30T13:18:28.433 回答