簡體   English   中英

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

[英]How to rename a file in .NET?

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

我希望能夠重命名本地驅動器或網絡位置上的文件。

如果使用System.IO.FileMove是最好的方法嗎?


備擇方案

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.RenameMicrosoft.VisualBasic.FileIO.FileSystem.RenameFile

Microsoft.VisualBasic.FileSystem.RenameSystem.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.MoveSystem.IO.FileInfo.MoveTo是唯一的可移植選項。


這都是MoveFile。

如上所述,所有這些方法都將從kernel32MoveFile MoveFile適用於系統上的任何已安裝的驅動器(甚至是網絡驅動器),但它不應用於從卷移動到另一個卷。 在這種情況下,有必要將文件復制到目標並刪除舊文件。


最好的選擇

由於Microsoft.VisualBasic.FileSystem.RenameMicrosoft.VisualBasic.FileIO.FileSystem.RenameFile可能不會在其他操作系統中使用,因為它們沒有被Mono移植,我將丟棄它們。

因此,我們留下了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)。

慶祝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM