使用System.IO.File
或其他.NET
类,重命名文件的最佳方法是什么?
我想要能够在本地驱动器或网络位置上重命名文件。
如果使用System.IO.File
,那么Move
是最好的方式吗?
System.IO.File.Move
您可以使用System.IO.File.Move
来重命名文件,例如:
var sourcePath = @"C:\folder\oldname.txt";
var destinationPath = @"C:\folder\newname.txt";
File.Move(sourcePath, destinationPath);
你可能希望保持相同的位置,只更改文件的名称。当然可以实现:
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);
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);
注意:你也可以按照上面展示的方法建立目标路径。
"手动移动"
显然,您始终可以打开现有文件,创建一个具有所需名称的新文件... 将旧文件的内容复制到新文件中,最后删除旧文件。 只要您拥有写访问权限,这将起作用,尽管日期和安全信息(文件所有者等)将不会保留。
您可以在如何将一个文件的内容写入另一个文件的“已接受的解决方案”中看到一个示例。
注释
注释1:其他替代方案包括:Microsoft.VisualBasic.FileSystem.Rename
和 Microsoft.VisualBasic.FileIO.FileSystem.RenameFile
。
Microsoft.VisualBasic.FileSystem.Rename
和 System.IO.File.Move
都是等效的,它们对参数进行检查、权限检查和围绕kernel32
的MoveFile
的错误处理。
关于Microsoft.VisualBasic.FileIO.FileSystem.RenameFile
,它将重命名给定全路径和新名称(类似于我上面介绍的用于构建目标路径),然后退回到kernel32
的MoveFile
。
以类似的方式,System.IO.FileInfo.MoveTo
将调用来自kernel32
的MoveFile
。
注释2:还应该注意,您无法从Mono中找到Microsoft.VisualBasic
。这意味着System.IO.File.Move
和System.IO.FileInfo.MoveTo
是唯一可移植的选项。
如上所述,所有这些方法都将退回到来自kernel32
的MoveFile
。 MoveFile
将适用于系统上挂载的任何驱动器(甚至网络驱动器),尽管不应将其用于从一个卷移动到另一个卷。 在这种情况下,需要将文件复制到目标并删除旧文件。
由于Microsoft.VisualBasic.FileSystem.Rename
和Microsoft.VisualBasic.FileIO.FileSystem.RenameFile
在其他操作系统中可能无法使用,因为它们没有被 Mono 移植,因此我将舍弃它们。
因此,我们只剩下System.IO.File.Move
和System.IO.FileInfo.MoveTo
。 在这两个之间,System.IO.File.Move
的开销较小,因为它不必维护FileInfo
对象的状态。 除此之外,它们将起同样的作用…因此,如果您已经使用了FileInfo
,请使用System.IO.FileInfo.MoveTo
,否则请使用System.IO.File.Move
。
因此,System.IO.File.Move
是在.NET中重命名文件的最佳选择!(他们没有给我们一个奇怪的API)。
庆祝!
System.IO.File
),但我认为问题是是否有更好的选项适用于不同驱动器和网络位置。我没有找到明确的声明,如果所提到的API在这些情况下起作用(我的直觉是它会)......但值得提到一些.NET中可用的重命名和移动文件的替代方法,这些方法在链接的问题中没有提到。 - Theraot