コード例 #1
0
ファイル: SfvChecker.cs プロジェクト: m-elbably/file-splitter
        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;
        }