web-dev-qa-db-de.com

Wie benenne ich eine Datei in .NET um?

Mit System.IO.File oder ein anderes .NET Klasse, wie kann ich eine Datei am besten umbenennen?

Ich möchte in der Lage sein, Dateien auf lokalen Laufwerken oder auf Netzwerkstandorten umzubenennen.

Bei Verwendung von System.IO.File, ist Move der beste Weg?

38
CJ7

Alternativen

System.IO.File.Move

Sie können eine Datei mit System.IO.File.Move Folgendermaßen umbenennen:

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

Möglicherweise möchten Sie den gleichen Speicherort beibehalten und nur den Namen der Datei ändern. Sicher ist das möglich:

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

Sie können auch System.IO.FileInfo.MoveTo Verwenden:

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

Hinweis: Sie können den Zielpfad auch wie oben gezeigt erstellen.


"Handbewegung"

Offensichtlich können Sie immer die vorhandene Datei öffnen, eine neue mit dem gewünschten Namen erstellen, die Wettbewerbe von der alten auf die neue kopieren und schließlich die alte löschen. Dies funktioniert, sofern Sie über Schreibzugriff verfügen. Daten und Sicherheitsinformationen (Eigentümer der Datei usw.) bleiben jedoch nicht erhalten.

Ein Beispiel dafür finden Sie unter die akzeptierte Lösung vonWie schreibe ich den Inhalt einer Datei in eine andere Datei? .


Notizen

Anmerkung 1 : Andere Alternativen umfassen: Microsoft.VisualBasic.FileSystem.Rename Und Microsoft.VisualBasic.FileIO.FileSystem.RenameFile.

Sowohl Microsoft.VisualBasic.FileSystem.Rename Als auch System.IO.File.Move Sind äquivalent. Sie führen Parameterprüfungen, Berechtigungsprüfungen und Fehlerbehandlungen um MoveFile von kernel32 Durch.

In Bezug auf Microsoft.VisualBasic.FileIO.FileSystem.RenameFile Werden Dateien im selben Ordner umbenannt, wobei der vollständige Pfad und der neue Name angegeben werden (ähnlich wie oben, um den Zielpfad zu erstellen). Anschließend wird auf MoveFile from zurückgegriffen kernel32.

Auf ähnliche Weise ruft System.IO.FileInfo.MoveToMoveFile von kernel32 Auf.

Hinweis 2 : Es sollte auch beachtet werden, dass Sie Microsoft.VisualBasic In Mono nicht finden können. Dies bedeutet, dass System.IO.File.Move Und System.IO.FileInfo.MoveTo Die einzigen tragbaren Optionen sind.


Es ist alles MoveFile.

Wie oben erwähnt, werden alle diese Methoden von kernel32 Auf MoveFile zurückgesetzt. MoveFile funktioniert für alle bereitgestellten Laufwerke im System (auch für Netzwerklaufwerke), sollte jedoch nicht zum Verschieben von einem Volume auf ein anderes verwendet werden. In diesem Fall müssen Sie die Datei auf das Ziel kopieren und die alte Datei entfernen.


Die beste Alternative

Da Microsoft.VisualBasic.FileSystem.Rename Und Microsoft.VisualBasic.FileIO.FileSystem.RenameFile Möglicherweise nicht in anderen Betriebssystemen verwendet werden, da sie nicht von Mono portiert werden, werde ich diese verwerfen.

Wir haben also noch System.IO.File.Move Und System.IO.FileInfo.MoveTo. Dazwischen hat System.IO.File.Move Weniger Overhead, da der Status des Objekts FileInfo nicht beibehalten werden muss. Ansonsten funktionieren sie genauso ... Wenn Sie FileInfo bereits verwenden, verwenden Sie System.IO.FileInfo.MoveTo, Andernfalls System.IO.File.Move.

Und so ist System.IO.File.Move Die beste Option, um Dateien in .NET umzubenennen! (Sie gaben uns keine verrückte API).

Feiern !

76
Theraot