/// <summary> /// Recursively copy a directory /// </summary> /// <param name="sourceDirectory"></param> /// <param name="targetDirectory"></param> /// <param name="progressCallback"> </param> public static ulong Copy(string sourceDirectory, string targetDirectory, CopyProcessCallback progressCallback) { var diSource = new DirectoryInfo(sourceDirectory); var diTarget = new DirectoryInfo(targetDirectory); return InternalCopy(diSource, diTarget, progressCallback); }
private static ulong InternalCopy(DirectoryInfo source, DirectoryInfo target, CopyProcessCallback progressCallback) { ulong bytesCopied = 0; // 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); bytesCopied += (ulong)fi.Length; fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true); if (progressCallback != null) progressCallback(fi.FullName); } // Copy each subdirectory using recursion. foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) { DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name); bytesCopied += InternalCopy(diSourceSubDir, nextTargetSubDir, progressCallback); } return bytesCopied; }
/// <summary> /// Recursively copy a directory /// </summary> /// <param name="sourceDirectory"></param> /// <param name="targetDirectory"></param> /// <param name="progressCallback"> </param> public static ulong Copy(string sourceDirectory, string targetDirectory, CopyProcessCallback progressCallback) { var diSource = new DirectoryInfo(sourceDirectory); var diTarget = new DirectoryInfo(targetDirectory); return(InternalCopy(diSource, diTarget, progressCallback)); }
private static ulong InternalCopy(DirectoryInfo source, DirectoryInfo target, CopyProcessCallback progressCallback) { ulong bytesCopied = 0; // 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); bytesCopied += (ulong)fi.Length; fi.CopyTo(Path.Combine(target.ToString(), fi.Name), true); if (progressCallback != null) { progressCallback(fi.FullName); } } // Copy each subdirectory using recursion. foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) { DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name); bytesCopied += InternalCopy(diSourceSubDir, nextTargetSubDir, progressCallback); } return(bytesCopied); }