/// <summary> /// Copies a directory to another location /// </summary> /// <param name="Source">Source directory</param> /// <param name="Destination">Destination directory</param> /// <param name="Recursive">Should the copy be recursive</param> /// <param name="Options">Options used in copying</param> /// <returns>The DirectoryInfo for the destination info</returns> public static DirectoryInfo CopyTo(this DirectoryInfo Source, string Destination, bool Recursive = true, CopyOptions Options = CopyOptions.CopyAlways) { if (Source == null) { throw new ArgumentNullException("Source"); } if (!Source.Exists) { throw new DirectoryNotFoundException("Source directory " + Source.FullName + " not found."); } if (string.IsNullOrEmpty(Destination)) { throw new ArgumentNullException("Destination"); } DirectoryInfo DestinationInfo = new DirectoryInfo(Destination); DestinationInfo.Create(); foreach (FileInfo TempFile in Source.EnumerateFiles()) { if (Options == CopyOptions.CopyAlways) { TempFile.CopyTo(Path.Combine(DestinationInfo.FullName, TempFile.Name), true); } else if (Options == CopyOptions.CopyIfNewer) { if (File.Exists(Path.Combine(DestinationInfo.FullName, TempFile.Name))) { FileInfo FileInfo = new FileInfo(Path.Combine(DestinationInfo.FullName, TempFile.Name)); if (FileInfo.LastWriteTime.CompareTo(TempFile.LastWriteTime) < 0) { TempFile.CopyTo(Path.Combine(DestinationInfo.FullName, TempFile.Name), true); } } else { TempFile.CopyTo(Path.Combine(DestinationInfo.FullName, TempFile.Name), true); } } else if (Options == CopyOptions.DoNotOverwrite) { TempFile.CopyTo(Path.Combine(DestinationInfo.FullName, TempFile.Name), false); } } if (Recursive) { foreach (DirectoryInfo SubDirectory in Source.EnumerateDirectories()) { SubDirectory.CopyTo(Path.Combine(DestinationInfo.FullName, SubDirectory.Name), Recursive, Options); } } return(new DirectoryInfo(Destination)); }
/// <summary> /// Copies the directory to the specified parent directory /// </summary> /// <param name="Directory">Directory to copy to</param> /// <param name="Options">Copy options</param> /// <returns>Returns the new directory</returns> public virtual IDirectory CopyTo(IDirectory Directory, CopyOptions Options = CopyOptions.CopyAlways) { if (InternalDirectory == null || Directory == null) { return(this); } Directory.Create(); foreach (IFile TempFile in EnumerateFiles()) { switch (Options) { case CopyOptions.CopyAlways: TempFile.CopyTo(Directory, true); break; case CopyOptions.CopyIfNewer: if (new FileInfo(Directory.FullName + "\\" + TempFile.Name.Replace("/", "").Replace("\\", ""), UserName, Password, Domain).Exists) { var FileInfo = new FileInfo(Directory.FullName + "\\" + TempFile.Name.Replace("/", "").Replace("\\", ""), UserName, Password, Domain); if (FileInfo.Modified.CompareTo(TempFile.Modified) < 0) { TempFile.CopyTo(Directory, true); } } else { TempFile.CopyTo(Directory, true); } break; case CopyOptions.DoNotOverwrite: TempFile.CopyTo(Directory, false); break; } } foreach (IDirectory SubDirectory in EnumerateDirectories()) { SubDirectory.CopyTo(new DirectoryInfo(Directory.FullName + "\\" + SubDirectory.Name.Replace("/", "").Replace("\\", ""), UserName, Password, Domain), Options); } return(Directory); }
/// <summary> /// Copies the directory to the specified parent directory /// </summary> /// <param name="directory">Directory to copy to</param> /// <param name="options">Copy options</param> /// <returns>Returns the new directory</returns> public virtual IDirectory CopyTo(IDirectory directory, CopyOptions options = CopyOptions.CopyAlways) { if (InternalDirectory is null || directory is null || string.IsNullOrEmpty(directory.FullName)) { return(this); } directory.Create(); foreach (var TempFile in EnumerateFiles()) { switch (options) { case CopyOptions.CopyAlways: TempFile.CopyTo(directory, true); break; case CopyOptions.CopyIfNewer: if (new FileInfo(directory.FullName + "\\" + TempFile.Name.Replace("/", "").Replace("\\", ""), Credentials).Exists) { var FileInfo = new FileInfo(directory.FullName + "\\" + TempFile.Name.Replace("/", "").Replace("\\", ""), Credentials); if (FileInfo.Modified.CompareTo(TempFile.Modified) < 0) { TempFile.CopyTo(directory, true); } } else { TempFile.CopyTo(directory, true); } break; case CopyOptions.DoNotOverwrite: TempFile.CopyTo(directory, false); break; } } foreach (var SubDirectory in EnumerateDirectories()) { SubDirectory.CopyTo(new DirectoryInfo(directory.FullName + "\\" + SubDirectory.Name.Replace("/", "").Replace("\\", ""), Credentials), options); } return(directory); }