2011-08-15 4 views
1

J'ai trouvé un petit extrait pour faire une copie de fichier récursive en C#, mais je suis un peu perplexe. J'ai besoin essentiellement de copier une structure de répertoire à un autre endroit, le long des lignes de ce ...Copie de fichiers récursivement

Source: C: \ data \ serveurs \ mc

Cible: E: \ mc

Le code pour ma fonction de copie à partir de maintenant est ...

//Now Create all of the directories 
    foreach (string dirPath in Directory.GetDirectories(baseDir, "*", SearchOption.AllDirectories)) 
    { 
     Directory.CreateDirectory(dirPath.Replace(baseDir, targetDir)); 
    } 


    // Copy each file into it’s new directory. 
    foreach (string file in Directory.GetFiles(baseDir, "*.*", SearchOption.AllDirectories)) 
    { 
     Console.WriteLine(@"Copying {0}\{1}", targetDir, Path.GetFileName(file)); 
     if (!CopyFile(file, Path.Combine(targetDir, Path.GetFileName(file)), false)) 
     { 
      int err = Marshal.GetLastWin32Error(); 
      Console.WriteLine("[ERROR] CopyFile Failed on {0} with code {1}", file, err); 
     } 
    } 

le problème est que dans la deuxième portée, je soit:

  1. utiliser Path.GetFileName(file) pour obtenir le nom de fichier réel sans le chemin, mais je perds le répertoire "mc" structure du répertoire ou
  2. utiliser "fichier" sans Path.Combine.

De toute façon, je dois faire un travail de chaîne méchant. Y at-il une bonne façon de le faire en C# (mon manque de connaissance avec l'API .NET me mène à plus de compliquer les choses)

+4

voir cette réponse http://stackoverflow.com/questions/627504/what-is-the-best-way-to-recursively-copy-contents-in-c/627518# 627518 – bpgergo

Répondre

0

au lieu de

foreach (string file in Directory.GetFiles(baseDir, "*.*", SearchOption.AllDirectories)) 
{ 

faire quelque chose comme ça

foreach (FileInfo fi in source.GetFiles()) 
{ 
    fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true); 
} 
+0

source.GetFiles() n'obtiendra pas récursivement les fichiers dans les sous-répertoires, mais uniquement dans le répertoire "source". –

Questions connexes