如何在.NET中重命名文件?

CJ7*_*CJ7 37 .net rename file

使用System.IO.File或其他.NET类,重命名文件的最佳方法是什么?

我希望能够重命名本地驱动器或网络位置上的文件.

如果使用System.IO.File,是Move最好的方法吗?

The*_*aot 76


备择方案

System.IO.File.Move

您可以使用以下命令重命名文件System.IO.File.Move:

var sourcePath = @"C:\folder\oldname.txt";
var destinationPath = @"C:\folder\newname.txt";
File.Move(sourcePath, destinationPath);
Run Code Online (Sandbox Code Playgroud)

您可能有兴趣保留相同的位置,只需更改文件的名称.当然可以做到:

var sourcePath = @"C:\folder\oldname.txt";
var newName = "newname.txt";
var directory = Path.GetDirectoryName(sourcePath);
var destinationPath = Path.Combine(directory, newName);
File.Move(sourcePath, destinationPath);
Run Code Online (Sandbox Code Playgroud)

System.IO.FileInfo.MoveTo

您还可以使用System.IO.FileInfo.MoveTo:

var sourcePath = @"C:\folder\oldname.txt";
var destinationPath = @"C:\folder\newname.txt";
FileInfo info = new FileInfo(sourcePath);
info.MoveTo(destinationPath);
Run Code Online (Sandbox Code Playgroud)

注意:您还可以构建目标路径,如上所示.


"动手"

显然,您可以随时打开现有文件,创建一个具有所需名称的新文件...将比赛从旧比赛复制到新比赛,最后删除旧比赛.这将有效,因为您具有写访问权限,但不会保留日期和安全信息(文件的所有者等).

您可以在如何将一个文件的内容写入另一个文件的已接受解决方案中 看到该示例.


笔记

注1:其他替代方案包括:Microsoft.VisualBasic.FileSystem.RenameMicrosoft.VisualBasic.FileIO.FileSystem.RenameFile.

这两个Microsoft.VisualBasic.FileSystem.RenameSystem.IO.File.Move是等价的,他们做的参数检查,权限检查和错误处理周围MoveFilekernel32.

至于Microsoft.VisualBasic.FileIO.FileSystem.RenameFile,它会给出完整路径和新名称(类似于我提出上面建立的目标路径)相同的文件夹重命名文件,然后回落到MoveFilekernel32.

以类似的方式System.IO.FileInfo.MoveTo将调用MoveFile来自kernel32.

注2:还应注意,你无法Microsoft.VisualBasic从Mono 找到.这意味着,System.IO.File.MoveSystem.IO.FileInfo.MoveTo是唯一的便携式选项.


这都是MoveFile.

正如上面提到的所有这些方法将回退到MoveFilekernel32.MoveFile适用于系统上任何已安装的驱动器(甚至网络驱动器),但不应用于从卷移动到另一个卷.在这种情况下,有必要将文件复制到目标并删除旧文件.


最好的选择

由于Microsoft.VisualBasic.FileSystem.RenameMicrosoft.VisualBasic.FileIO.FileSystem.RenameFile不能在其他操作系统中使用,因为它们不会被移植单,我会放弃这些.

所以,我们留下了System.IO.File.MoveSystem.IO.FileInfo.MoveTo.在那些之间System.IO.File.Move具有较少的开销,因为它不必维持FileInfo对象的状态.除此之外,他们将工作相同...所以,如果你已经FileInfo使用System.IO.FileInfo.MoveTo否则System.IO.File.Move.

因此,System.IO.File.Move是在.NET中重命名文件的最佳选择!(他们没有给我们一个糟糕的API).

庆祝!