执行文件复制/删除和移动之间的区别

时间:2011-07-08 08:37:04

标签: c# .net file file-io

之间有什么区别
  1. 使用File.Copy()File.Delete()
  2. 复制文件并将其删除
  3. 使用File.Move()
  4. 移动文件

    在执行这些操作所需的许可方面有什么区别吗?任何帮助非常感谢。

4 个答案:

答案 0 :(得分:8)

File.Move方法可用于将文件从一个路径移动到另一个路径。此方法适用于磁盘卷,如果源和目标相同,则不会引发异常。

您无法使用Move方法覆盖现有文件。如果您尝试通过将同名文件移动到该目录来替换文件,则会出现IOException。 要解决此问题,您可以使用复制和删除方法的组合

答案 1 :(得分:3)

性能方面,如果在同一个文件系统上,移动文件(简化术语)只是调整文件系统本身的一些内部寄存器(可能调整{{{ 3}}),没有实际移动的东西。

想象一下,你有180MiB移动,你可以以大约30MiB / s的速度写入你的磁盘。然后使用复制/删除,大约需要6秒钟才能完成。通过一个简单的移动[相同的文件系统],它变得如此之快,你可能甚至没有意识到它。

(我曾经写过一些会移动或复制多个文件的事务性文件系统帮助程序,无论是全部还是全部;为了尽可能快地进行提交,我先将所有内容移动/复制到临时子文件夹中,然后然后最后的提交会将现有数据移动到另一个文件夹(以启用回滚),并将新数据移动到目标)。

答案 2 :(得分:0)

我认为在许可方面没有任何区别,但我个人更喜欢使用File.Move(),因为那时你们都在同一个“事务”中发生了这两个动作。换句话说,如果移动中的某些东西失败,则整个操作失败。但是,如果您分两步(复制+删除)将其分解,如果复制工作和删除失败,则必须手动反转“事务”(删除副本)。

答案 3 :(得分:0)

在两个点检查文件传输中的权限:来源和目标。因此,如果您在源文件夹中没有读取权限,或者您在目标中没有写入权限,则这些方法都会抛出AccessDeniedException异常。换句话说,权限检查与使用中的方法无关。