根据选择将目录从源复制到目标
Copy Directory from Source to Destination depending upon selection
我已经实现了如下 CopyDirectoryAndFiles 功能,但它无法正常工作
案例 - 我只想 copy/create NAC -> NAC11 -> NAC12
(这是文件夹结构)从源到目标 create/copy NAC11->NAC12
我正在传递源路径,因为 - @"C:\TestArea\Destination\SUP000001041202-01-0002-001\NAC
它的最后一部分 (\NAC) 是在 运行 时间从 UI 您要复制的文件夹中选择的,它也可以是多个文件夹,如果我只将路径作为 @"C:\TestArea\Destination\SUP000001041202-01-0002-001
传递,它会从 src->dest
复制所有内容,但我只想要选定的一个..我如何在下面的代码中处理这种情况?
Main() -
copyDirectory(@"C:\TestArea\Destination\SUP000001041202-01-0002-001\NAC"
, @"C:\TestArea\Destination\SUP000005150622-1205-0015-M");
Method -
private static void copyDirectory(string Source, string destination)
{
string[] Files = null;
if (destination[destination.Length - 1] != Path.DirectorySeparatorChar)
{
destination += Path.DirectorySeparatorChar;
}
if (!Directory.Exists(destination))
{
Directory.CreateDirectory(destination);
}
Files = Directory.GetFileSystemEntries(Source);
foreach (string Element in Files)
{
// Sub directories
if (Directory.Exists(Element))
{
copyDirectory(Element, destination + Path.GetFileName(Element));
}
else
{
// Files in directory
File.Copy(Element, destination + Path.GetFileName(Element), true);
}
}
}
如果我的理解正确,您指定了以下源目录和目标目录:
var source = @"C:\TestArea\Destination\SUP000001041202 - 01 - 0002 - 001\NAC";
var dest = @"C:\TestArea\Destination\SUP000001041202-01-0002-001";
并且您想将 NAC
目录(及其所有内容)从 source
复制到 destination
目录,但问题是 NAC
目录被直接复制到 20041202-01-0002-001
文件夹中,当你真的想要像下面这样的路径结束时(这个 NAC
目录应该与源 NAC
目录):
@"C:\TestArea\Destination\SUP000001041202-01-0002-001\NAC"
如果是这样,那么你只需要先修改目标目录路径,将源目录的名称添加到其中,如下所示:
destination = Path.Combine(destination, sourceDir.Name);
这是一个应该可以解决问题的代码示例:
private static void CopyDirectory(string source, string destination)
{
var sourceDir = new DirectoryInfo(source);
if (!sourceDir.Exists) throw new DirectoryNotFoundException(nameof(source));
// Add last directory of source to destination and create it
destination = Path.Combine(destination, sourceDir.Name);
Directory.CreateDirectory(destination);
// Copy files from source to destination
foreach (var file in sourceDir.GetFiles())
{
file.CopyTo(Path.Combine(destination, file.Name));
}
// Recursively copy sub directories from source to destination
foreach (var subDir in sourceDir.GetDirectories())
{
CopyDirectory(subDir.FullName, destination);
}
}
我已经实现了如下 CopyDirectoryAndFiles 功能,但它无法正常工作
案例 - 我只想 copy/create NAC -> NAC11 -> NAC12
(这是文件夹结构)从源到目标 create/copy NAC11->NAC12
我正在传递源路径,因为 - @"C:\TestArea\Destination\SUP000001041202-01-0002-001\NAC
它的最后一部分 (\NAC) 是在 运行 时间从 UI 您要复制的文件夹中选择的,它也可以是多个文件夹,如果我只将路径作为 @"C:\TestArea\Destination\SUP000001041202-01-0002-001
传递,它会从 src->dest
复制所有内容,但我只想要选定的一个..我如何在下面的代码中处理这种情况?
Main() -
copyDirectory(@"C:\TestArea\Destination\SUP000001041202-01-0002-001\NAC"
, @"C:\TestArea\Destination\SUP000005150622-1205-0015-M");
Method -
private static void copyDirectory(string Source, string destination)
{
string[] Files = null;
if (destination[destination.Length - 1] != Path.DirectorySeparatorChar)
{
destination += Path.DirectorySeparatorChar;
}
if (!Directory.Exists(destination))
{
Directory.CreateDirectory(destination);
}
Files = Directory.GetFileSystemEntries(Source);
foreach (string Element in Files)
{
// Sub directories
if (Directory.Exists(Element))
{
copyDirectory(Element, destination + Path.GetFileName(Element));
}
else
{
// Files in directory
File.Copy(Element, destination + Path.GetFileName(Element), true);
}
}
}
如果我的理解正确,您指定了以下源目录和目标目录:
var source = @"C:\TestArea\Destination\SUP000001041202 - 01 - 0002 - 001\NAC";
var dest = @"C:\TestArea\Destination\SUP000001041202-01-0002-001";
并且您想将 NAC
目录(及其所有内容)从 source
复制到 destination
目录,但问题是 NAC
目录被直接复制到 20041202-01-0002-001
文件夹中,当你真的想要像下面这样的路径结束时(这个 NAC
目录应该与源 NAC
目录):
@"C:\TestArea\Destination\SUP000001041202-01-0002-001\NAC"
如果是这样,那么你只需要先修改目标目录路径,将源目录的名称添加到其中,如下所示:
destination = Path.Combine(destination, sourceDir.Name);
这是一个应该可以解决问题的代码示例:
private static void CopyDirectory(string source, string destination)
{
var sourceDir = new DirectoryInfo(source);
if (!sourceDir.Exists) throw new DirectoryNotFoundException(nameof(source));
// Add last directory of source to destination and create it
destination = Path.Combine(destination, sourceDir.Name);
Directory.CreateDirectory(destination);
// Copy files from source to destination
foreach (var file in sourceDir.GetFiles())
{
file.CopyTo(Path.Combine(destination, file.Name));
}
// Recursively copy sub directories from source to destination
foreach (var subDir in sourceDir.GetDirectories())
{
CopyDirectory(subDir.FullName, destination);
}
}