ASP.NET C#使用System.IO复制具有子目录的目录

我需要将整个目录C:\ X复制到C:\ Y \ X,我还需要复制子文件夹。
是否有任何方法可以使用System.IO.File \ Directory命名空间?
谢谢所有帮手!

此类将复制或移动文件夹,而不进行递归调用。
方法是使用自己的堆栈来处理递归,这是为了避免StackOverflowException

public static class CopyFolder { public static void CopyDirectory(string source, string target) { var stack = new Stack(); stack.Push(new Folders(source, target)); while (stack.Count > 0) { var folders = stack.Pop(); Directory.CreateDirectory(folders.Target); foreach (var file in Directory.GetFiles(folders.Source, "*.*")) { string targetFile = Path.Combine(folders.Target, Path.GetFileName(file)); if (File.Exists(targetFile)) File.Delete(targetFile); File.Copy(file, targetFile); } foreach (var folder in Directory.GetDirectories(folders.Source)) { stack.Push(new Folders(folder, Path.Combine(folders.Target, Path.GetFileName(folder)))); } } } public static void MoveDirectory(string source, string target) { var stack = new Stack(); stack.Push(new Folders(source, target)); while (stack.Count > 0) { var folders = stack.Pop(); Directory.CreateDirectory(folders.Target); foreach (var file in Directory.GetFiles(folders.Source, "*.*")) { string targetFile = Path.Combine(folders.Target, Path.GetFileName(file)); if (File.Exists(targetFile)) File.Delete(targetFile); File.Move(file, targetFile); } foreach (var folder in Directory.GetDirectories(folders.Source)) { stack.Push(new Folders(folder, Path.Combine(folders.Target, Path.GetFileName(folder)))); } } Directory.Delete(source, true); } public class Folders { public string Source { get; private set; } public string Target { get; private set; } public Folders(string source, string target) { Source = source; Target = target; } } } 

这是从xneurons博客复制的。

 public static void CopyAll(DirectoryInfo source, DirectoryInfo target) { // 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()) { Console.WriteLine(@"Copying {0}\{1}", target.FullName, fi.Name); 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); } } 

您可以使用SearchOption.AllDirectories递归搜索文件夹,您只需要在复制之前创建目录…

 // string source, destination; - folder paths int pathLen = source.Length; foreach (string dirPath in Directory.GetDirectories(source, "*", SearchOption.AllDirectories)) { string subPath = dirPath.SubString(pathLen); string newpath = Path.Combine(destination, subPath); Directory.CreateDirectory(newpath ); } foreach (string filePath in Directory.GetFiles(source, "*.*", SearchOption.AllDirectories)) { string subPath = filePath.SubString(pathLen); string newpath = Path.Combine(destination, subPath); File.Copy(filePath, newpath); }