public static void MoveFile(string source, string target, MoveFileMode mode) { if (File.Exists(target)) { switch (mode) { case MoveFileMode.Overwrite: File.Delete(target); File.Move(source, target); break; case MoveFileMode.OverwriteIfNewer: if (File.GetCreationTimeUtc(source) >= File.GetCreationTimeUtc(target)) { File.Delete(target); File.Move(source, target); } else { File.Delete(source); } break; default: break; } } else { File.Move(source, target); } }
/// <summary> /// Moves a file from source to destination /// </summary> /// <param name="source">The source file.</param> /// <param name="destination">The destination to move the file.</param> /// <param name="mode">Controls the action taken when the source files exists at destination.</param> public static void MoveFile(string source, string destination, MoveFileMode mode) { if (!File.Exists(destination)) { File.Move(source, destination); } else { switch (mode) { case MoveFileMode.Overwrite: File.Delete(destination); File.Move(source, destination); break; case MoveFileMode.OverwriteIfNewer: if (File.GetCreationTimeUtc(source) >= File.GetCreationTimeUtc(destination)) { File.Delete(destination); File.Move(source, destination); } else { File.Delete(source); } break; default: throw new ArgumentException("Unknown enum value"); } } }
/// <summary> /// Moves a directory from one location to another. /// </summary> /// <param name="source">The source directory.</param> /// <param name="destination">The destination directory</param> /// <param name="mode">Controls the action taken when the source files exists at destination.</param> public static void MoveDirectory(string source, string destination, MoveFileMode mode) { //Now Create all of the directories foreach (string dirPath in Directory.GetDirectories(source, "*", SearchOption.AllDirectories)) { Directory.CreateDirectory(Path.Combine(destination, dirPath.Substring(source.Length))); } //Copy all the files foreach (string newPath in Directory.GetFiles(source, "*.*", SearchOption.AllDirectories)) { MoveFile(newPath, Path.Combine(destination, newPath.Substring(source.Length)), mode); } }
// ...Because .NET is piece of .SHIT // Watch for stack overflow, ye be warned // Note: This method can be rewritten to 'merge' two directories together (like 'move' in explorer does) public static void RecursiveMoveDirectory(string source, string target, MoveFileMode mode) { Directory.CreateDirectory(target); string[] subdirs = Directory.GetDirectories(source); for (int i = 0; i < subdirs.Length; i++) { RecursiveMoveDirectory(subdirs[i], Path.Combine(target, Path.GetFileName(subdirs[i])), mode); } string[] files = Directory.GetFiles(source); for (int i = 0; i < files.Length; i++) { string targetFile = Path.Combine(target, Path.GetFileName(files[i])); MoveFile(files[i], targetFile, mode); } Directory.Delete(source, false); }
/// <summary> /// Moves a directory from one location to another. /// </summary> /// <param name="source">The source directory.</param> /// <param name="destination">The destination directory</param> /// <param name="mode">Controls the action taken when the source files exists at destination.</param> public static void MoveDirectory(string source, string destination, MoveFileMode mode) { //Now Create all of the directories foreach (string dirPath in Directory.GetDirectories(source, "*", SearchOption.AllDirectories)) Directory.CreateDirectory(Path.Combine(destination, dirPath.Substring(source.Length))); //Copy all the files foreach (string newPath in Directory.GetFiles(source, "*.*", SearchOption.AllDirectories)) MoveFile(newPath, Path.Combine(destination, newPath.Substring(source.Length)), mode); }