2009-03-09 7 views

答えて

34

さてあなたはこの

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

を試すことができ、これはすべての作業を行う方法であって、

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

私はこれが:)

+3

グレートコード1があります変更するもの: //対象のディレクトリが存在するかどうかを確認する if(Directory.Exists(target.FullName)== false) { ディレクトリ。作成ディレクトリ(targ et.FullName); } あなたは既にあなたが持っているDirectoryInfoオブジェクトだけでよい: if(!target.Exists) { target.Create(); } – greektreat

+0

変更ありませんでした。 –

+1

私は 'target.Exists'が' Directory.Exists(target.FullName) 'がどこで正しく動作しなかったかをちょっと調べました... –

18

ちょうどMicrosoft.VisualBasic.dllMicrosoft.VisualBasic.FileIO.FileSystem.CopyDirectoryを使用するのに役立つことを願っていますアセンブリ。

あなたは再帰的にフォルダをダウン検索するSearchOption.AllDirectoriesを使用することができますMicrosoft.VisualBasic

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

音が便利です。どのようにディレクトリクラスにはこのメソッドがありませんでしたか? –

6

への参照を追加し、あなたはちょうどあなたがコピーする前に、ディレクトリを作成する必要があります...

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

素晴らしい!私がしなければならなかった唯一の調整は、int pathLen = source.Length + 1 – nabeelfarid

+0

です。乾杯、微調整しました:-) – Keith

関連する問題