示例#1
0
        private void ReadEntries()
        {
            int i = GPakUtil.FirstEntryOffset;

            while (i < PackageFileSize)
            {
                // Read 4 bytes to find the length of the entry's name
                var entryNameLength =
                    GPakUtil.GetByteRangeAsInteger(GPakUtil.GetBytesFromFile(_packageFileReader, i, 4));
                i += 4;

                // Read ENTRY_NAME bytes to obtain it's name
                var entryName =
                    GPakUtil.GetByteRangeAsString(GPakUtil.GetBytesFromFile(_packageFileReader, i, entryNameLength));
                i += entryName.Length;

                // Read 1 byte to check if the entry is compressed or not ("C" for compressed, "N" for not compressed)
                var compressedFlag =
                    GPakUtil.GetByteRangeAsString(GPakUtil.GetBytesFromFile(_packageFileReader, i, 1));
                i += 1;
                var isCompressed = compressedFlag == "C";

                // Read 4 bytes to get the size of the entry in the package
                var entryContentSize =
                    GPakUtil.GetByteRangeAsInteger(GPakUtil.GetBytesFromFile(_packageFileReader, i, 4));
                i += 4;

                // Create a new entry based on the previously gathered info
                _entryTable.Add(entryName, new GPakEntry(entryContentSize, isCompressed, i));

                i += entryContentSize;

                EntryCount++;
            }

            _packageFileReader.Close();
        }
示例#2
0
        private bool IsHeaderValid()
        {
            var header = GPakUtil.GetBytesFromFile(_packageFileReader, 0, GPakUtil.FirstEntryOffset);

            return(GPakUtil.GetByteRangeAsString(header).Equals(GPakUtil.Header));
        }