Verzeichnisse unter C# kopieren

#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