public static MythicPackage Read(string fileName) { using (FileStream stream = new FileStream(fileName, FileMode.Open)) { using (BinaryReader reader = new BinaryReader(stream)) { MythicPackage myp = new MythicPackage(); int found = 0; int index = 0; myp.Info = new FileInfo(fileName); myp.Header = MythicPackageHeader.Read(reader); MythicPackageBlock block = myp.Add(MythicPackageBlock.Read(reader, ref found)); block.Index = 0; while (stream.Seek(block.NextBlock, SeekOrigin.Begin) != 0) { block = myp.Add(MythicPackageBlock.Read(reader, ref found)); block.Index = index + 1; index += 1; } myp.Complete = (found * 100) / (double)myp.Header.FileCount; return(myp); } } }
public static MythicPackageHeader Read( BinaryReader reader ) { byte[] id = reader.ReadBytes( 4 ); if ( id[ 0 ] != 'M' || id[ 1 ] != 'Y' || id[ 2 ] != 'P' || id[ 3 ] != 0 ) throw new Exception( "This is not a Mythic Package file!" ); MythicPackageHeader h = new MythicPackageHeader(); h.Version = reader.ReadInt32(); h.Misc = reader.ReadInt32(); // must be 0xFD23EC43 h.HeaderSize = reader.ReadInt32(); reader.ReadBytes( 4 ); // 0x0000000000 h.BlockSize = reader.ReadInt32(); h.FileCount = reader.ReadInt32(); reader.ReadBytes( h.HeaderSize - 28 ); // 0x00... return h; }
public static MythicPackageHeader Read(BinaryReader reader) { byte[] id = reader.ReadBytes(4); if (id[0] != 'M' || id[1] != 'Y' || id[2] != 'P' || id[3] != 0) { throw new Exception("This is not a Mythic Package file!"); } MythicPackageHeader h = new MythicPackageHeader(); h.Version = reader.ReadInt32(); h.Misc = reader.ReadInt32(); // must be 0xFD23EC43 h.HeaderSize = reader.ReadInt32(); reader.ReadBytes(4); // 0x0000000000 h.BlockSize = reader.ReadInt32(); h.FileCount = reader.ReadInt32(); reader.ReadBytes(h.HeaderSize - 28); // 0x00... return(h); }