using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Text.RegularExpressions;using System.Threading.Tasks;namespace FileUtility{ public class Program { public static void DeepCopy(DirectoryInfo source, DirectoryInfo target, params string[] excludePatterns) { if (target.FullName.Contains(source.FullName)) return; // Go through the Directories and recursively call the DeepCopy Method for each one foreach (DirectoryInfo dir in source.GetDirectories()) { var dirName = dir.Name; var shouldExclude = excludePatterns.Aggregate(false, (current, pattern) => current || Regex.Match(dirName, pattern).Success); if (!shouldExclude) DeepCopy(dir, target.CreateSubdirectory(dir.Name), excludePatterns); } // Go ahead and copy each file to the target directory foreach (FileInfo file in source.GetFiles()) { var fileName = file.Name; var shouldExclude = excludePatterns.Aggregate(false, (current, pattern) => current || Regex.Match(fileName, pattern).Success); if (!shouldExclude) file.CopyTo(Path.Combine(target.FullName, fileName)); } } static void Main(string[] args) { DeepCopy(new DirectoryInfo(@"d:/test/b"), new DirectoryInfo(@"d:/test/a")); DeepCopy(new DirectoryInfo(@"d:/test/c"), new DirectoryInfo(@"d:/test/c/c.1")); DeepCopy(new DirectoryInfo(@"d:/test/1/"), new DirectoryInfo(@"d:/test/2/"), new string[] { ".*\\.txt" }); Console.WriteLine("複製成功..."); Console.ReadKey(); } }}