public override BinaryReader MakeReader()
{
var compressed = new byte[SizeOnDisk];
this.PackageStream.Seek(OffsetInFile, SeekOrigin.Begin);
int readSize = this.PackageStream.Read(compressed, 0, (int)SizeOnDisk);
if (readSize != SizeOnDisk)
{
var msg = String.Format("Failed to read {0} bytes from archive (only got {1})", SizeOnDisk, readSize);
throw new InvalidDataException(msg);
}
if (Crc != 0)
{
var computedCrc = Crc32.Compute(compressed);
if (computedCrc != Crc)
{
var msg = String.Format(
"CRC check failed on file '{0}', archive is possibly corrupted. Expected {1,8:X}, got {2,8:X}",
Name, Crc, computedCrc
);
throw new InvalidDataException(msg);
}
}
var uncompressed = BinUtils.Decompress(compressed, (int)Size(), (byte)Flags);
var memStream = new MemoryStream(uncompressed);
var reader = new BinaryReader(memStream);
return reader;
}