-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);
            }
        }
    }
4

1 回答 1

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);
        }
    }
}
于 2013-03-22T18:29:01.323 回答