C#File.Move vs Rename - 它实际上是移动文件还是只重命名?

Kai*_*ran 5 c# file move

在阅读了关于如何"重命名"文件的stackoverflow帖子后,解决方案结果是使用Files.Move或Directory.Move方法.

我知道在Windows中,如果我重命名它是瞬间的,因为我认为它不是移动驱动器上的文件,因为它正在改变某些索引的位置.

当我使用Files.Move或Directory.Move它会做同样的事情,还是要做一个复制,然后删除?

我试图避免我的驱动器磨损.

Ale*_*lex 5

请参阅以下使用的基础Win32 API的文档File.Move:

MoveFile函数将在同一目录或目录中移动(重命名)文件或目录(包括其子项).需要注意的是,当目标位于不同的卷上时,MoveFile函数将在目录移动时失败.如果跨卷移动文件,则MoveFile不会使用该文件移动安全描述符.将在目标目录中为该文件分配默认安全描述符.MoveFile函数使用链接跟踪服务协调其操作,因此可以在移动链接源时对其进行跟踪.

关于你的问题:

它会复制然后删除吗?

如果您将文件移动到不同的磁盘上,它唯一会执行"复制"然后再执行"删除".


Meh*_*raz 2

在 .NET Framework 的 Windows 实现中,System.IO.File.Move调用底层 Win32 函数MoveFile

关于 MoveFile 的 MSDN:

移动现有文件或目录,包括其子文件。

它似乎与 Windows 资源管理器调用的函数相同。所以是的,它做同样的事情,只是重命名而不是复制/删除。

public static void Move(String sourceFileName, String destFileName) {
    ...
    ... 
    if (!Win32Native.MoveFile(fullSourceFileName, fullDestFileName))
    {
        __Error.WinIOError();
    } 
}
Run Code Online (Sandbox Code Playgroud)