在文件夹内迭代并仅复制子文件夹
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);
}
}
}
我正在做一个项目,我需要做的是在一些文件夹中迭代,只复制它们的子文件夹,然后粘贴到一些不同的位置。
文件夹结构如下:
-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);
}
}
}