Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 如何在.NET中重命名文件?_File_Rename_.net - Fatal编程技术网

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

File 如何在.NET中重命名文件?,file,rename,.net,File,Rename,.net,使用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.M

使用
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.Rename文件

Microsoft.VisualBasic.FileSystem.Rename
System.IO.File.Move
都是等效的,它们从
kernel32
执行参数检查、权限检查和错误处理

关于
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)


庆祝一下

一篇关于你将要做什么的文章是。这怎么可能不是堆栈溢出启动5年后的重复呢?@PeterMortensen最接近匹配:。虽然在本例中,CJ7在阅读时知道该方法(
System.IO.File
),但问题是是否有更好的选项可以跨不同的驱动器和网络位置工作。我还没有找到明确的声明,如果提到的API在这些情况下工作(我的直觉是它是这样的)。。。但值得一提的是,在.NET中重命名和移动文件avalialbe的一些替代方案可能在链接问题中未提及。起点:其他: