/// <summary> /// Copies the specified source folder and subfolders to the specified destination folder. /// </summary> /// <param name="source">Source folder.</param> /// <param name="target">Destination folder.</param> /// <param name="progress">Object that controls the abort state.</param> private static void copyAll(DirectoryInfo source, DirectoryInfo target, CopyDirectoryCallback progress) { // Check if the target directory exists, if not, create it. if (!Directory.Exists(target.FullName)) { Directory.CreateDirectory(target.FullName); } String targetFolder = target.ToString(); // Copy each file into it's new directory. foreach (FileInfo fi in source.GetFiles()) { String fullFileName = Path.Combine(targetFolder, fi.Name); if ((progress != null) && progress(true, fullFileName)) { throw new OperationCanceledException("Copying folder " + source.ToString() + " to " + targetFolder); } fi.CopyTo(fullFileName, true); if ((progress != null) && progress(false, fullFileName)) { throw new OperationCanceledException("Copying folder " + source.ToString() + " to " + targetFolder); } } // Copy each subdirectory using recursion. foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) { DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name); copyAll(diSourceSubDir, nextTargetSubDir, progress); } }
/// <summary> /// Copies the specified source folder and subfolders to the specified destination folder. /// </summary> /// <param name="sourceDirectory">Source folder.</param> /// <param name="targetDirectory">Destination folder.</param> /// <param name="progress">Object to report progress to.</param> public static void CopyDirectory(string sourceDirectory, string targetDirectory, CopyDirectoryCallback progress) { DirectoryInfo diSource = new DirectoryInfo(sourceDirectory); DirectoryInfo diTarget = new DirectoryInfo(targetDirectory); copyAll(diSource, diTarget, progress); }