2013-03-22 61 views
-3

我想找到扩展名为.zzz的每个文件,然后将该文件的父文件夹(及其所有内容)复制到目标目录。下面的代码工作,但它只复制第一级的子目录。递归复制所有文件和目录

private void btn_submit_Click(object sender, EventArgs e) 
    { 
     string srcFolder = txt_src.Text; 
     string destFolder = txt_dest.Text; 
     foreach (string zzz in Directory.GetFiles(srcFolder, "*.zzz", SearchOption.AllDirectories)) 
     { 
      string modulePath = Directory.GetParent(zzz).FullName; 
      string moduleName = Directory.GetParent(zzz).Name; 
      Directory.CreateDirectory(destFolder + "\\" + moduleName); 
      foreach (string subFolders in Directory.GetDirectories(modulePath, "*", SearchOption.AllDirectories)) 
      { 
       Directory.CreateDirectory(subFolders.Replace(modulePath, destFolder + "\\" + moduleName)); 
      } 
      foreach (string allFiles in Directory.GetFiles(modulePath, "*.*", SearchOption.AllDirectories)) 
      { 
       File.Copy(allFiles, allFiles.Replace(modulePath, destFolder + "\\" + moduleName), true); 
      } 
     } 
    } 
+0

有这么多在线的例子,以及这里'SO'看看这个'SO发布'http://stackoverflow.com/questions/10389701/how-to-create-a (MSDN Reference CopyDirectory)(http://msdn.microsoft.com/zh-cn/library/bb762914.aspx) – MethodMan 2013-03-22 18:23:12

+0

File.CopyTo(参数1,函数返回所有文件和文件夹)参数2)< - 提示:第二个是递归。 – Greg 2013-03-22 18:27:14

+0

这个问题有一个很好的递归函数的例子,它列出了给定目录中的所有文件。采取并运行它:http://stackoverflow.com/questions/929276/how-to-recursively-list-all-the-files-in-a-directory-in-c – tnw 2013-03-22 18:31:30

回答

3

您可以递归。我只是把它放在一起 - 我可能没有完全分析你的变量,但它会给你一个想法。

private void btn_submit_Click(object sender, EventArgs e) 
{ 
    copy_stuff(txt_src.Text, txt_dest.Text); 
} 

private void copy_stuff(string srcFolder, string destFolder) 
{ 
    foreach (string zzz in Directory.GetFiles(srcFolder, "*.zzz", SearchOption.AllDirectories)) 
    { 
     string modulePath = Directory.GetParent(zzz).FullName; 
     string moduleName = Directory.GetParent(zzz).Name; 
     Directory.CreateDirectory(destFolder + "\\" + moduleName); 
     foreach (string subFolders in Directory.GetDirectories(modulePath, "*", SearchOption.AllDirectories)) 
     { 
      string dest = subFolders.Replace(modulePath, destFolder + "\\" + moduleName); 
      Directory.CreateDirectory(dest); 
      copy_stuff(subfolders, dest); 
     } 
     foreach (string allFiles in Directory.GetFiles(modulePath, "*.*", SearchOption.AllDirectories)) 
     { 
      File.Copy(allFiles, allFiles.Replace(modulePath, destFolder + "\\" + moduleName), true); 
     } 
    } 
} 
+0

谢谢!我非常接近,但并不认为我可以构建整个文件夹结构,而不仅仅是复制所有文件。工作很棒! – 2013-03-22 20:15:12