public void GetEntry() { SubItems = new List <SubItem>(); int pos = 0; ms.Seek(0, SeekOrigin.Begin); BinaryReader br = new BinaryReader(ms); int nid = 0; while (pos < packageSize - 0x40) { br.BaseStream.Seek(pos, SeekOrigin.Begin); int sig = br.ReadInt32(); if (((sig & 0xffff) == 0x101)) //压缩了 { br.BaseStream.Seek(-4, SeekOrigin.Current); int ptr = (int)br.BaseStream.Position; int filehdr = br.ReadInt32(); int compressSize = br.ReadInt32(); uint fileType = br.ReadUInt32(); int decompressSize = br.ReadInt32(); string fName = string.Format("{0}_LB_{1}.{2}", this.baseName, nid, GetFileExtension(fileType)); SubItem subItem = new SubItem { FileName = fName, FileID = filehdr, IsCompressed = true, ExtMagic = fileType, NeedReCompress = false }; posDictionary.Add(fName, ptr); SubItems.Add(subItem); pos += compressSize; if (pos % 0x40 != 0) { pos += (0x40 - pos % 0x40); } nid += 1; } else { //没压缩 br.BaseStream.Seek(-4, SeekOrigin.Current); int ptr = (int)br.BaseStream.Position; int filehdr = br.ReadInt32(); int decompressSize = br.ReadInt32(); uint fileType = br.ReadUInt32(); string fName = string.Format("{0}_{1}.{2}", this.baseName, nid, GetFileExtension(fileType)); SubItem subItem = new SubItem { FileName = fName, FileID = filehdr, IsCompressed = false, NeedReCompress = false }; posDictionary.Add(fName, ptr); SubItems.Add(subItem); pos += decompressSize; if (pos % 0x40 != 0) { pos += (0x40 - pos % 0x40); } nid += 1; } } }