【发布时间】:2013-10-29 02:01:16
【问题描述】:
现在问题来了: 我有很多代码都做同样的事情。也就是说,它将两个文件夹的内容复制到一个目标文件夹中,并将它们合并到目标文件夹中。我的问题是,我找不到(经过大量谷歌搜索)如何实际复制源目录 + 内容,而不仅仅是其内容和子文件夹然后最终合并 .
这可能是我获取目录的方式:我使用文件夹选择对话框,将路径名添加到列表框(显示),然后从列表框中的项目创建(字符串)目录列表。
这是到目前为止的代码。 (部分来自 MSDN)
public static void CopyAll(DirectoryInfo source, DirectoryInfo target)
{
if (source.FullName.ToLower() == target.FullName.ToLower())
{
return;
}
// Check if the target directory exists, if not, create it.
if (Directory.Exists(target.FullName) == false)
{
Directory.CreateDirectory(target.FullName);
}
// Copy each file into it's new directory.
foreach (FileInfo fi in source.GetFiles())
{
fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true);
}
// Copy each subdirectory using recursion.
foreach (DirectoryInfo diSourceSubDir in source.GetDirectories())
{
DirectoryInfo nextTargetSubDir =
target.CreateSubdirectory(diSourceSubDir.Name);
CopyAll(diSourceSubDir, nextTargetSubDir);
}
}
//This is inside a button click Method
List<string> pathList = new List<string>();
pathList = lstBox.Items.Cast<String>().ToList();
string sourceDirectory;
string targetDirectory;
DirectoryInfo dirSource;
DirectoryInfo dirTarget;
for (int i = 0 ; i < pathList.Count; i++)
{
sourceDirectory = pathList.ElementAt(i);
targetDirectory = browserSave.SelectedPath; //browserSave is the Folder Selection Dialog
dirSource = new DirectoryInfo(sourceDirectory);
dirTarget = new DirectoryInfo(targetDirectory);
CopyAll(dirSource, dirTarget);
}
令人讨厌的是,C# 没有 Directory.Copy 函数,这将是非常有用的。 回顾一下。
我选择文件夹 1。 我选择文件夹 2。 I 选择目标文件夹。 我按确定。 预期结果:目标文件夹有两个文件夹,文件夹 1 和文件夹 2 里面。两者都有里面的所有文件。 实际结果:目标文件夹合并了松散的文件,源文件夹的子目录完好无损。 (这很烦人)
我希望这些信息足以为您的专业人士提供帮助。
【问题讨论】:
-
如果您的函数将两个 String 对象(源和目标路径)作为参数,则更简洁的方法是。在此处检查接受的答案:*.com/questions/1066674/…
-
我做了更多的搜索,甚至添加了对 Visual Basic DLL 的引用——它有自己的 CopyDirectory() 方法。它做同样的问题。问题必须在于我如何获取源目录或其他东西。不确定...谢谢!
-
@Sizza - 是的,这就是你调用副本的方式 - 请参阅我的答案。
标签: c#