private static void CheckHash() { if (fileName == null) { return; } if (!File.Exists(fileName)) { return; } string pDir = Path.GetDirectoryName(fileName); CRC32 crc = new CRC32(); StreamReader sR = new StreamReader(fileName); string fCrc32 = ""; string sLine = ""; int sIndex = 0; while (!sR.EndOfStream) { sLine = sR.ReadLine(); if (sLine.TrimStart(' ').StartsWith(";")) { continue; } sIndex = sLine.LastIndexOf(' '); if (sIndex > 0) { files.Add(sLine.Substring(0, sIndex)); filesCrc.Add(sLine.Substring(sIndex + 1, sLine.Length - sIndex - 1)); } } filesCount = files.Count; if (filesCount <= 0) { return; } for (int i = 0; i < files.Count; i++) { string filePath = Path.Combine(pDir, files[i]); if (File.Exists(filePath)) { FileStream f = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, 8192); fCrc32 = crc.GetCrc32(f).ToString("X"); if (fCrc32 == filesCrc[i]) { msg.Add(files[i] + " Correct."); } else { hasError = true; msg.Add(files[i] + " Does not match."); } f.Close(); f.Dispose(); } else { hasError = true; msg.Add(files[i] + " File does not exist."); } Interlocked.Increment(ref finished); } if (hasError && createLog) { string logPath = fileName + ".log"; try { if (File.Exists(logPath)) { File.Delete(logPath); } StreamWriter sW = new StreamWriter(fileName + ".log"); sW.WriteLine("Generated by MMH Split on " + DateTime.Now.ToString()); sW.WriteLine("========================"); sW.WriteLine("File" + Space(files[0].Length) + " Crc Check Result"); sW.WriteLine("=====" + Space(files[0].Length) + " ================"); sW.WriteLine(""); for (int i = 0; i < msg.Count; i++) { sW.WriteLine(msg[i]); } sW.Close(); sW.Dispose(); } catch (IOException) { //Nothing } } sR.Close(); sR.Dispose(); isRunning = false; }