2010-01-07 15 views
43

Ich konnte nirgendwo eine Methode DirectoryInfo.Rename (To) oder FileInfo.Rename (To) finden. Also, ich schrieb meine eigene und ich poste es hier für jeden zu verwenden, wenn sie es brauchen, denn seien wir ehrlich: die MoveTo-Methoden sind übertrieben und erfordern immer zusätzliche Logik, wenn Sie nur ein Verzeichnis oder eine Datei umbenennen möchten:Umbenennen eines Verzeichnisses in C#

public static class DirectoryExtensions 
{ 
    public static void RenameTo(this DirectoryInfo di, string name) 
    { 
     if (di == null) 
     { 
      throw new ArgumentNullException("di", "Directory info to rename cannot be null"); 
     } 

     if (string.IsNullOrWhiteSpace(name)) 
     { 
      throw new ArgumentException("New name cannot be null or blank", "name"); 
     } 

     di.MoveTo(Path.Combine(di.Parent.FullName, name)); 

     return; //done 
    } 
} 
+2

Können Sie die ganze Frage neu formulieren und eine Antwort mit Ihrer Lösung posten? – Coincoin

+5

Keine Frage? :( – Sapph

+1

Scheint wie ein Overkill in sich selbst. –

Antwort

88

es gibt keinen Unterschied zwischen verschieben und Umbenennen; Sie sollten einfach Directory.Move anrufen.

Im Allgemeinen, wenn Sie nur eine einzige Operation zu tun, sollten Sie die static Methoden in den File und Directory Klassen verwenden, anstatt FileInfo und DirectoryInfo Objekte zu schaffen.

Weitere Informationen zum Arbeiten mit Dateien und Verzeichnissen finden Sie unter here.

+3

Achten Sie darauf, dass Fälle wie 'foo' zu' Foo' wechseln wird eine IOException auslösen, wenn mit einem einfachen 'Directory.Move' als getan beide werden als der gleiche Weg betrachtet, also gibt es einen Unterschied ... nur zu sagen: – Kabbalah

49

Sie sollten sie bewegen:

Directory.Move(source, destination); 
12

Eine existiert bereits. Wenn Sie die "Move" -Syntax des System.IO-Namespace nicht überwinden können. Es gibt eine statische Klasse FileSystem in dem Microsoft.VisualBasic.FileIO-Namespace, der bereits über einen RenameDirectory und RenameFile verfügt. Wie von SLaks erwähnt, ist dies nur ein Wrapper für Directory.Move und File.Move.

+3

+1 heiliger Mist, Batman! –

+9

Alles, was sie tun, ist Parameter zu validieren und 'Directory.Move' und' File.Move' zu ​​nennen – SLaks

+3

Ja, einverstanden.Ich denke, seine Beschwerde ist, weil "Move" Sie nicht automatisch denken lässt "Rename". Wenn er die Syntax will, existiert es in diesem Format, nur in einem anderen Namensraum. – jsmith

Verwandte Themen