예제 #1
0
        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;
                }
            }
        }