/// <summary> /// Copies a directory /// </summary> /// <param name="CopyFrom">Source and Destination</param> public static void Copy(DirCopyInfo CopyFrom) { DirCopyInfo Info = CopyFrom; if (!Directory.Exists(Info.Source)) { throw new FileNotFoundException(); } if (!Directory.Exists(Info.Destination)) { //Console.WriteLine("Creating Directory: " + Info.Destination); Directory.CreateDirectory(Info.Destination); } string[] DirFiles; string[] DirDirs; try { DirFiles = Directory.GetFiles(Info.Source); DirDirs = Directory.GetDirectories(Info.Source); } catch { throw new FileNotFoundException(); } foreach (string SingleDir in DirDirs) { string DirName = "\\"; DirName += SingleDir.Split('\\')[SingleDir.Split('\\').Length - 1]; DirCopyInfo NextInfo = new DirCopyInfo(); NextInfo.BaseDir = Info.BaseDir; NextInfo.Destination = Info.Destination + DirName; NextInfo.Source = SingleDir; Copy(NextInfo); } foreach (string SingleFile in DirFiles) { try { string FileName = SingleFile.Split('\\')[SingleFile.Split('\\').Length - 1]; File.Copy(SingleFile, Info.Destination + "\\" + FileName, Info.OverWrite); } catch { return; } } }
/// <summary> /// Starts a Directory copy operation in another thread /// </summary> /// <param name="CopyFrom">Source and Destination</param> public static void BeginAsyncCopy(DirCopyInfo CopyFrom) { System.Threading.Thread Worker = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(ThreadCopy)); CopyFrom.BaseDir = CopyFrom.Source; Worker.Start((object)CopyFrom); }