Exemple #1
0
        /// <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);
                }
            }
        }