在文件夹内迭代并仅复制子文件夹

Iterate inside folders and copy subfolders only

我正在做一个项目,我需要做的是在一些文件夹中迭代,只复制它们的子文件夹,然后粘贴到一些不同的位置。

文件夹结构如下:

-Folder1
--subfolder1
---test.doc
---test.pdf
---test.xlsx
--subfolder2
---test.mp3
---test.pdf
---test.eml

-Folder2
--subfolder4
---test2.pdf
---test2.msg
---test2.eml
--subfolder3
---test4.msg
---test4.eml
---test4.pdf

现在,我要做的是从它们的父文件夹中“提取”子文件夹并将它们复制到不同的目录中。最后的结构必须是这样的:

--subfolder1
--subfolder2
--subfolder3

(当然里面有他们对应的文件)

这是我迄今为止尝试过的方法,但它似乎并没有完全按照我的要求进行操作,它只是复制了所有文件夹在目标目录中的显示方式,以及父文件夹。

    static void CopyDirectory(string sourceDir, string destinationDir, bool recursive)
    {
        // Get information about the source directory
        var dir = new DirectoryInfo(sourceDir);

        // Check if the source directory exists
        if (!dir.Exists)
            throw new DirectoryNotFoundException($"Source directory not found: {dir.FullName}");

        // Cache directories before we start copying
        DirectoryInfo[] dirs = dir.GetDirectories();

        // Create the destination directory
        Directory.CreateDirectory(destinationDir);

        // Get the files in the source directory and copy to the destination directory
        foreach (FileInfo file in dir.GetFiles())
        {
            string targetFilePath = Path.Combine(destinationDir, file.Name);
            file.CopyTo(targetFilePath);
        }

        // If recursive and copying subdirectories, recursively call this method
        if (recursive)
        {
            foreach (DirectoryInfo subDir in dirs)
            {
                string newDestinationDir = Path.Combine(destinationDir, subDir.Name);
                CopyDirectory(subDir.FullName, newDestinationDir, true);
            }
        }
    }

提前致谢。

在递归函数中,您必须创建另一个在子文件夹内迭代的循环,然后您只需将文件复制到新目录内。基本上是这样的:

 if (recursive)
            {
                foreach (DirectoryInfo subDir in dirs)
                {
                    DirectoryInfo[] Subdirs = subDir.GetDirectories(); 
                    foreach (DirectoryInfo subDir2 in Subdirs)
                    {
                        string newDestinationDir = Path.Combine(destinationDir, subDir2.Name);
                        CopyDirectory(subDir2.FullName, newDestinationDir, true);
                        Console.WriteLine("Finnished copying file: " + subDir2.Name);
                    }
                }
            }