public static UInt32 Calculate(String fileName) { UInt32 checksum = 0xFFFFFFFF; // open file using (FileStream fs = File.OpenRead(fileName)) { using (BinaryReader br = new BinaryReader(fs)) { // read version Int32 version = br.ReadInt32(); if (version != 29 && version != 30) { throw new ApplicationException(String.Format("Unknown map version {0}, expected 29 or 30.", version)); } // read lump headers LumpHeader[] lumpHeaders = new LumpHeader[nLumpHeaders]; for (Int32 i = 0; i < nLumpHeaders; i++) { lumpHeaders[i].Offset = br.ReadInt32(); lumpHeaders[i].Length = br.ReadInt32(); } // read lumps and calculate checksum for (Int32 i = 1; i < nLumpHeaders; i++) { fs.Seek(lumpHeaders[i].Offset, SeekOrigin.Begin); Int32 length = lumpHeaders[i].Length; while (length > 0) { Byte[] buffer = null; if (length >= readBufferSize) { buffer = br.ReadBytes(readBufferSize); } else { buffer = br.ReadBytes(length); } length -= buffer.Length; ProcessBuffer(buffer, ref checksum); } } } } return(checksum); }
public static UInt32 Calculate(String fileName) { UInt32 checksum = 0xFFFFFFFF; // open file using (FileStream fs = File.OpenRead(fileName)) { using (BinaryReader br = new BinaryReader(fs)) { // read version Int32 version = br.ReadInt32(); if (version != 29 && version != 30) { throw new ApplicationException(String.Format("Unknown map version {0}, expected 29 or 30.", version)); } // read lump headers LumpHeader[] lumpHeaders = new LumpHeader[nLumpHeaders]; for (Int32 i = 0; i < nLumpHeaders; i++) { lumpHeaders[i].Offset = br.ReadInt32(); lumpHeaders[i].Length = br.ReadInt32(); } // read lumps and calculate checksum for (Int32 i = 1; i < nLumpHeaders; i++) { fs.Seek(lumpHeaders[i].Offset, SeekOrigin.Begin); Int32 length = lumpHeaders[i].Length; while (length > 0) { Byte[] buffer = null; if (length >= readBufferSize) { buffer = br.ReadBytes(readBufferSize); } else { buffer = br.ReadBytes(length); } length -= buffer.Length; ProcessBuffer(buffer, ref checksum); } } } } return checksum; }