/// <summary> /// ファイルの内容をMD5ハッシュ値で比較する /// </summary> /// <param name="targetPath1"></param> /// <param name="targetPath2"></param> /// <param name="errorRetryCount">エラー時のリトライ回数</param> /// <returns>同じ場合はTrueを返す</returns> private static bool IsSameFile(string targetPath1, string targetPath2, int errorRetryCount) { try { //File.OpenReadではロック中のファイルを開くとエラーになる //そのため、 FileStream でオプションを指定して開く if (File.ExistsFile(targetPath1) && File.ExistsFile(targetPath2)) { var md5 = System.Security.Cryptography.MD5.Create(); string file1md5 = File.GetFileMd5HashValue(targetPath1); string file2md5 = File.GetFileMd5HashValue(targetPath2); if (file1md5.Equals(file2md5)) { //同じ内容 return(true); } else { //違う内容 return(false); } } else { //どちらかのファイルが存在しない。 return(false); } } catch { //エラー if (errorRetryCount <= 0) { //1回はリトライする System.Threading.Thread.Sleep(3000); //数秒待つ return(File.IsSameFile(targetPath1, targetPath2, errorRetryCount + 1)); } else { return(false); } } }
/// <summary> /// ファイルを削除 /// </summary> /// <param name="targetPath">削除するファイルのフルパス</param> /// <param name="useRecycleBox">削除時にゴミ箱に入れるか?</param> /// <returns>成功したらTrueを返す。ファイルが存在しない場合もTrueを返す</returns> public static bool DeleteFile(string targetPath, bool useRecycleBox = false) { if (String.IsNullOrEmpty(targetPath)) { //null or Empty return(false); } try { if (File.ExistsFile(targetPath)) { if (useRecycleBox) { //ゴミ箱へ入れる Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile( targetPath, Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin); } else { //直接削除 Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile( targetPath, Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, Microsoft.VisualBasic.FileIO.RecycleOption.DeletePermanently); } } return(true); } catch { //削除失敗 return(false); } }