为什么在System.IO的Directory类中有Move方法,而没有Copy方法

本文关键字:方法 Move Copy System IO Directory 为什么 | 更新日期: 2023-09-27 18:29:48

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

更新:

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

更新2:

这是引用mmclean:的评论

目录。但是,Move不会移动,而是重命名。因此"destination"路径是指向目录的完整路径,而不是而移动到另一个驱动器不可能的

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

为什么在System.IO的Directory类中有Move方法,而没有Copy方法

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

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

他们似乎保持了与Windows API提供的界面大致相似的界面。

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

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

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

与其质疑原因,不如使用VB.NET的CopyDirectoryhttp://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.filesystem.copydirectory.aspx.