Feed
Google+
Contact
XING
LinkedIn
Twitter
ICQ
meebo.com

Mit C# ein Verzeichnis kopieren - Mit allen Unterordner und Dateien - Part II

by Roland Schumacher alias GENiALi 13. August 2007 -- 368 words  -- 174 mal gelesen

Vor langer, sehr langer zeit, habe ich mal beschrieben wie man mit C# ganze
Verzeichnis kopieren kann. Mit allen Unterordnern und Dateien.

Mir wurde jetzt von einer freundlichen Person mitgeteilt (Dirk Winter, www.kwsiso.de) das die Methode
auf die Nase fällt wenn man ein Verzeichnis kopieren möchte, dass nur Dateien
aber keine Unterverzeichnisse enthält.

Hier die korrigierte Version von mir. Die Zeile 17 war schlicht am falschen Ort.
Wenn es keine Unterverzeichnisse gab wurde das Zielverzeichnis einfach nicht erstellt.
Somit lief die Methode auf einen Fehler. Der Fehler ist in Zeile 8 korrigiert.

 

   1:          private static void CopyFolder(string sourceFolder, string targetFolder)
   2:          {
   3:              //Gib mir alle Unterverzeichnisse zurück
   4:              string[] strFolders = Directory.GetDirectories(sourceFolder);
   5:              string strZielFolder = string.Empty;
   6:   
   7:              /*DAS IST RICHTIG HIER*/
   8:              Directory.CreateDirectory(targetFolder);
   9:   
  10:              //Durch alle Verzeichnisse laufen
  11:              foreach (string strFolder in strFolders)
  12:              {
  13:                  //Verzeichnis am Zielort ersellen
  14:                  strZielFolder = strFolder.Replace(sourceFolder, targetFolder);
  15:                  
  16:                  /*DAS IST FLASCH HIER*/
  17:                  //Directory.CreateDirectory(strZielFolder);
  18:   
  19:                  //Die nächsten unterordner suchen
  20:                  CopyFolder(strFolder, strZielFolder);
  21:              }
  22:   
  23:              //Jetzt alle Files im Verzeichnis holen
  24:              string[] strFiles = Directory.GetFiles(sourceFolder);
  25:   
  26:              //Durch alle Files laufen
  27:              foreach (string strFile in strFiles)
  28:              {
  29:                  string strZiel = Path.Combine(targetFolder, Path.GetFileName(strFile));
  30:                  File.Copy(strFile, strZiel, true);
  31:              }
  32:          }

Dirk schickte mir seine Version. Die will ich euch nicht vorenthalten.
Viel eleganter als meine anno dazumal. :-) Danke Dirk.

   1:          private static void CopyFolder(string sourceFolder, string targetFolder)
   2:          {
   3:              // Verzeichnis am Zielort erstellen
   4:              Directory.CreateDirectory(targetFolder);
   5:   
   6:              // Alle Dateien kopieren
   7:              string[] files = Directory.GetFiles(sourceFolder);
   8:              foreach (string file in files)
   9:              {
  10:                  string target = Path.Combine(targetFolder, Path.GetFileName(file));
  11:                  File.Copy(file, target, true);
  12:              }
  13:   
  14:              // Alle Unterverzeichnisse kopieren
  15:              string[] subSourceFolders = Directory.GetDirectories(sourceFolder);
  16:              foreach (string subSourceFolder in subSourceFolders)
  17:              {
  18:                  string subTargetFolder = subSourceFolder.Replace(sourceFolder, targetFolder);
  19:                  CopyFolder(subSourceFolder, subTargetFolder);
  20:              }
  21:          }

Er machte mich aber noch auf eine andere Möglichkeit aufmerksam.
Man füge in seinem Projekt ein Verweis auf die Microsoft.VisualBasic.dll hinzu.
Dann noch ein using Microsoft.VisualBasic.FileIO; (C# natürlich) und die folgende  Zeile:

   1:  FileSystem.CopyDirectory(sourceFolder, targetFolder);

Der Freakfaktor geht einfach verloren. Dass muss natürlich jeder selber wissen. :-D

es läuft: Green Day - Dookie - When I Come Around

Tags: ,

Allerlei | Entwicklung

Kommentare (2) -

caladan
caladan
09.06.2008 15:16:03 #

kleiner tipp: sollte man definitiv nicht so wie oben beschrieben machen, da jegliche orderinformationen verloren gehen. zusätzlich funktioniert dies bei best. systemordnern nicht. grad bei windows mit MUI kommt es beim kopieren von userprofilen zu problemen, da diese im orginal anders heissen und anders geflagged sind.

Antwort

GENiALi
GENiALi
09.06.2008 17:38:21 #

Dieses kopieren ist auch nicht dafür gedacht die Ordnerinfos mit zu nehmen. Das geht definitiev nicht so einfach. Wenn die Security mit soll müsste man das mit AddFileSecurity machen.

Antwort

Kommentar schreiben

  Country flag

biuquote
  • Kommentar
  • Live Vorschau
Loading

Statistik

Gesamte Posts: 1025
Dieses Jahr: 7
Diesen Monat: 1
Diese Woche: 0
Kommentare: 929
Total Bewertungen: 91
Ø Bewertung: 4,42
Meisten Kommentare
Google+ ... (28)
Beste Ø Bewertung
Tastaturlayout von Visual Stud ... (5)
Meiste Bewertungen
Windows 7 und die ersten Erfah ... (5)

Buttons

Stop Spam Harvesters, Join Project Honey Pot Benutzerprofil von GENiALi connection speed test network connection Bloggeramt.de Slug.ch Blog Verzeichnis und Blog Webkatalog Schumacher Roland Seitwert Valid XHTML 1.0 Transitional

writing