Verzeichnisse unter C# kopieren
Kleines Snippet wie man unter C-Sharp Verzeichnisse kopiert.
#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