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.
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