为什么在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上有一个非常简单的复制操作实现。
实用的答案是没有Windows API调用来复制目录,而有Windows API调用来移动(也就是重命名)目录(MoveFile()
)。
Directory.Move()
调用MoveFile()
作为其实现的一部分。但没有什么可以要求复制的。
他们似乎保持了与Windows API提供的界面大致相似的界面。
此外,对失败的目录副本的错误处理非常糟糕。它是否必须回滚任何更改?如何处理一个失败的拷贝将是如此依赖于上下文,以至于很难有一个通用的方法。这可能就是为什么没有Windows API调用来复制目录的原因。
另一件可能导致复杂性增加的事情是在复制过程中锁定不同的文件,以及在进行复制时从目录中添加和删除文件。
(尽管正如这里的另一个答案所指出的,有一种Visual Basic方法可以复制目录,它必须解决其中的一些问题。)
与其质疑原因,不如使用VB.NET的CopyDirectory
http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.filesystem.copydirectory.aspx.