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.
GFU-Schulungen  [Anzeige]

VB.NET 2017/2015/2013 Einführung

Das Seminar befähigt Sie zur eigenständigen Entwicklung von anwenderorientierten Programmen in VB.NET, worin auch der Einsatz von Datenbanken enthalten ist.

ASP.NET Core und Angular Komplett für .NET-Entwickler

Sie  lernen in drei (3) Tagen wie man mit  ASP.NET Core und den Technologien  MVC, Entity Framework, WebAPI und  Razor professionelle sowie moderne  Web-Anwendungsarchitekturen aufbaut.  Die Schulung ist der perfekte  Einstieg um insbesondere datengetriebene  und präsentationsorientierte  Applikationen auf Basis der robusten und  skalierbaren ASP.NET Core  Plattform zu erstellen. Nach der Veranstaltung kennen Sie die Konzepte von Angular und können Angular in neue und bestehende ASP.NET-Anwendungen einsetzen.

#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!