-3

I want to locate every file with the extension .zzz, then copy that file's parent folder (along with all of its contents) to the destination directory. The code below works, but it only copies the first level of subdirectories.

 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);
            }
        }
    }
Andy Dudley
  • 299
  • 2
  • 5
  • 14
  • There are so many examples of this online as well as here on `SO` take a look at this `SO posting` http://stackoverflow.com/questions/10389701/how-to-create-a-recursive-function-to-copy-all-files-and-folders [MSDN Reference CopyDirectory](http://msdn.microsoft.com/en-us/library/bb762914.aspx) – MethodMan Mar 22 '13 at 18:23
  • File.CopyTo(Parameter 1, Parameter 2) <-- Hint: The second one is Recursive. – Greg Mar 22 '13 at 18:27
  • This question has a great example of a recursive function that lists all files in a given directory. Take that and run with it: http://stackoverflow.com/questions/929276/how-to-recursively-list-all-the-files-in-a-directory-in-c – tnw Mar 22 '13 at 18:31

1 Answers1

3

You can just be recursive. I just put this together - I might not have analysed your variables perfectly but it will give you an idea.

 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);
        }
    }
}
Julian
  • 1,522
  • 11
  • 26
  • Thanks! I was very close, but didn't consider that I could build the entire folder structure than just copy all files. Worked great! – Andy Dudley Mar 22 '13 at 20:15