Directory全部copy
File.Copyはあるのに!
Static Classも拡張メソッドできたらDirectoryに突っ込みたい
単純なCopyではなくて、複製?overwriteがtrueなら新しいファイルで上書き。こっちが古かったら上書きされる。
CopyDirectoriesだけなら一方向
そういえばWindows的にはFolderなんじゃないかと今更
/// <summary> /// ディレクトリの双方向レプリケーションを実施する。 /// </summary> /// <param name="directory1">複製対象のディレクトリ</param> /// <param name="directory2">複製対象のディレクトリ</param> /// <param name="overwrite">trueの場合、同一ファイルは更新日時を元に新しいファイルを正として上書きを行う。</param> public static void ReplicationDirectory( string directory1, string directory2, bool overwrite = true ) { CopyDirectories( directory1, directory2, true ); CopyDirectories( directory2, directory1, true ); } /// <summary> /// ディレクトリの複製を実施する。 /// </summary> /// <param name="sourceDirectory">複製元のディレクトリ</param> /// <param name="destDirectory">複製先のディレクトリ</param> /// <param name="overwrite">trueの場合、同一ファイルは更新日時を元に新しいファイルを正として上書きを行う。</param> public static void CopyDirectories( string sourceDirectory, string destDirectory, bool overwrite ) { var sourceDirectoryInfo = new DirectoryInfo( sourceDirectory ); if ( !sourceDirectoryInfo.Exists ) { return; } var destDirectoryInfo = new DirectoryInfo( destDirectory ); if ( !destDirectoryInfo.Exists ) { destDirectoryInfo.Create(); destDirectoryInfo.Attributes = sourceDirectoryInfo.Attributes; } CopyDirectoryFiles( sourceDirectoryInfo, destDirectoryInfo, overwrite ); foreach ( var sourceSubDirectoryInfo in sourceDirectoryInfo.GetDirectories() ) { CopyDirectories( sourceSubDirectoryInfo.FullName , Path.Combine( destDirectoryInfo.FullName, sourceSubDirectoryInfo.Name), overwrite ); } } private static void CopyDirectoryFiles( DirectoryInfo sourceDirectoryInfo, DirectoryInfo destDirectoryInfo, bool overwrite ) { foreach ( var sourceFileInfo in sourceDirectoryInfo.EnumerateFiles() ) { var destFileInfoEnum = destDirectoryInfo.EnumerateFiles( sourceFileInfo.Name ); if ( destFileInfoEnum.Count() != 0 && overwrite ) { var destFileInfo = destFileInfoEnum.First(); if ( destFileInfo.LastWriteTimeUtc < sourceFileInfo.LastWriteTimeUtc ) { File.Copy( sourceFileInfo.FullName, destFileInfo.FullName, true ); } else if ( sourceFileInfo.LastWriteTimeUtc < destFileInfo.LastWriteTimeUtc ) { File.Copy( destFileInfo.FullName, sourceFileInfo.FullName, true ); } } else if ( destFileInfoEnum.Count() == 0 ) { File.Copy( sourceFileInfo.FullName, Path.Combine( destDirectoryInfo.FullName, sourceFileInfo.Name ) ); } } }