Gesamtes Verzeichnis im C# kopieren

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Hier einmal deine Methode die ich bearbeitet habe. Code den ich für überflüssig hiel, hab ich auskommentiert.

    private void CopyDirectoryWithIncludedFiles(string dirCopySource, string dirCopyTarget)
    {
        // wenn aktueller Ordner nicht existiert -> ersstellen
        if (!Directory.Exists(dirCopyTarget))
            Directory.CreateDirectory(dirCopyTarget);

        // alle Unterverzeichnisse des aktuellen Verzeichnisses ermitteln
        string[] subDirectories = Directory.GetDirectories(dirCopySource);

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

            string targetPath = dirCopyTarget + "\\" + Path.GetFileName(subDirectory);

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

            // rekursiever Aufruf
            CopyDirectoryWithIncludedFiles(subDirectory, targetPath);
        }


        // 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(@"\")));
            //}

            string targetPath = dirCopyTarget + "\\" + Path.GetFileName(fileSource);

            // Datei kopieren, wenn schon vorhanden überschreiben
            File.Copy(fileSource, targetPath, true);
        }
    }

Und hier ist eine etwas kürzere Methode die ich angefertigt hab'.:

    private void CopyDirectory(string dirSource, string dirTarget)
    {
        // wenn aktueller Ordner nicht existiert -> ersstellen
        if (!Directory.Exists(dirTarget))
            Directory.CreateDirectory(dirTarget);

        // Unterverzeichnise durchlaufen und Funktion mit dazu gehörigen Zielpfad erneut aufrufen (Rekursion)
        foreach (string subDir in Directory.GetDirectories(dirSource))
            CopyDirectory(subDir,
                          dirTarget + "\\" + Path.GetFileName(subDir));

        // alle enthaltenden Dateien des aktuellen Verzeichnisses durchlaufen und Kopieren
        foreach (string strFile in Directory.GetFiles(dirSource))
            File.Copy(strFile,
                      dirTarget + "\\" + Path.GetFileName(strFile),
                      true);
    }

PS: Ich bin mir nicht 100% sicher ob das was ich gepostet hab', eine Antwort bzw die Lösung auf die von dir gestellte Frage war. Falls ich die Frage/Aufgabe falsch verstanden hab, bitte ich um eine bessere Erklärung.

MfG KlickKlackKluck