Feedback

C# - Ordner mit Inhalt kopieren (rekursiv)

Veröffentlicht von am 25.08.2009
(1 Bewertungen)
Dieses Snippet kopiert das angegebenen Quellverzeichnis, inklusive enthaltener Dateien, in das angegebenen Zielverzeichnis.

Dafür muss ein Verweis auf System.IO angelegt werden.
Es wurde mit dem StringBuilder gearbeitet da dieser leichte Performance Vorteile bringen kann, wenn viele Dateien bzw. Ordner kopiert werden sollen. Denn er erzeugt nicht immer ein neues Objekt, sondern "ergänzt" das bestehende nur.


using System.IO;



Ich hoffe es ist Hilfreich das kleine Snippet und ist nicht mit Fehler behaftet, ich konnte beim testen nichts feststellen.
#region -CopyDirectoryWithIncludedFiles(string dirCopySource, string dirCopyTarget)
#region XML-Doku
/// <summary>
///     Kopiert das angegebene Quellverzeichnis mit den beinhaltenden Verzeichnissen und Dateien in das angegebene Zielverzeichnis.
/// </summary>
/// <param name="dirCopySource">
///     Verzeichnis das kopiert werden soll mit dem gesamten Inhalt
/// </param>
/// <param name="dirCopyTarget">
///     Verzeichnis in dem das Quellverzeichnis kopiert werden soll
/// </param>
#endregion
private void CopyDirectoryWithIncludedFiles(string dirCopySource, string dirCopyTarget)
{
    // alle Unterverzeichnisse des aktuellen Verzeichnisses ermitteln
    string[] subDirectories = Directory.GetDirectories(dirCopySource);

    // Zielpfad erzeugen
    StringBuilder newTargetPath = new StringBuilder();
    {
        newTargetPath.Append(dirCopyTarget);
        newTargetPath.Append(dirCopySource.Substring(dirCopySource.LastIndexOf(@"\")));
    }

    // wenn aktueller Ordner nicht existiert -> ersstellen
    if(!Directory.Exists(newTargetPath.ToString()))
        Directory.CreateDirectory(newTargetPath.ToString());


    // Unterverzeichnise durchlaufen und Funktion mit dazu gehörigen Zielpfad erneut aufrufen (Rekursion)
    foreach (string subDirectory in subDirectories)
    {
        string newDirectoryPath = subDirectory;

        // wenn ''/'' an letzter Stelle dann entfernen
        if (newDirectoryPath.LastIndexOf(@"\") == (newDirectoryPath.Length - 1))
            newDirectoryPath = newDirectoryPath.Substring(0, newDirectoryPath.Length - 1);

        // rekursiever Aufruf
        CopyDirectoryWithIncludedFiles(newDirectoryPath, newTargetPath.ToString());
    }


    // alle enthaltenden Dateien des aktuellen Verzeichnisses ermitteln
    string[] fileNames = Directory.GetFiles(dirCopySource);
    foreach (string fileSource in fileNames)
    {
        // Zielpfad + Dateiname
        StringBuilder fileTarget = new StringBuilder();
        {
            fileTarget.Append(newTargetPath);
            fileTarget.Append(fileSource.Substring(fileSource.LastIndexOf(@"\")));
        }

        // Datei kopieren, wenn schon vorhanden überschreiben
        File.Copy(fileSource, fileTarget.ToString(), true);
    }
}
#endregion

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!