2009-03-09 10 views

Odpowiedz

34

Cóż można spróbować tego

DirectoryInfo sourcedinfo = new DirectoryInfo(@"E:\source"); 
DirectoryInfo destinfo = new DirectoryInfo(@"E:\destination"); 
copy.CopyAll(sourcedinfo, destinfo); 

i jest to metoda, że ​​nie wszystkie prace:

public void CopyAll(DirectoryInfo source, DirectoryInfo target) 
{ 
    try 
    { 
     //check if the target directory exists 
     if (Directory.Exists(target.FullName) == false) 
     { 
      Directory.CreateDirectory(target.FullName); 
     } 

     //copy all the files into the new directory 

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


     //copy all the sub directories using recursion 

     foreach (DirectoryInfo diSourceDir in source.GetDirectories()) 
     { 
      DirectoryInfo nextTargetDir = target.CreateSubdirectory(diSourceDir.Name); 
      CopyAll(diSourceDir, nextTargetDir); 
     } 
     //success here 
    } 
    catch (IOException ie) 
    { 
     //handle it here 
    } 
} 

Mam nadzieję, że to pomoże :)

+3

Wielka kod jest jedna rzecz, którą chciałbym zmienić: // sprawdź, czy katalog docelowy istnieje , jeśli (Directory.Exists (target.FullName) == false) { Directory.CreateDirectory (targ et.FullName); } } możesz tylko znaleźć obiekt DirectoryInfo, który już masz: , jeśli (! Target.Exists) { target.Create(); } – greektreat

+0

Dla mnie działało bez żadnych zmian. –

+1

Kilka razy miałem 'target.Exists' nie działa poprawnie, gdzie' Directory.Exists (target.FullName) 'did ... –

18

Wystarczy użyć Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory w Microsoft.VisualBasic.dll montaż.

Dodaj odwołanie do Microsoft.VisualBasic

Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory(source, destination); 
+4

brzmi użytecznie. jak to się stało, że klasa Directory nie ma tej metody? –

6

Można użyć SearchOption.AllDirectories rekursywnie szukać w dół foldery, wystarczy stworzyć katalogi przed skopiowaniem ...

// string source, destination; - folder paths 
int pathLen = source.Length + 1; 

foreach (string dirPath in Directory.GetDirectories(source, "*", SearchOption.AllDirectories)) 
{ 
    string subPath = dirPath.Substring(pathLen); 
    string newpath = Path.Combine(destination, subPath); 
    Directory.CreateDirectory(newpath); 
} 

foreach (string filePath in Directory.GetFiles(source, "*.*", SearchOption.AllDirectories)) 
{ 
    string subPath = filePath.Substring(pathLen); 
    string newpath = Path.Combine(destination, subPath); 
    File.Copy(filePath, newpath); 
} 
+1

genialny! jedyne usprawnienie musiałem zrobić to int pathLen = source.Length + 1 – nabeelfarid

+0

Pozdrowienia, ulepszenia wykonane :-) – Keith

Powiązane problemy