Beispiel #1
0
        private static void ReadFileHeaders(StreamReader sr, SaveGameFile savegame)
        {
            using (var br = new BinaryReader(sr.BaseStream))
            {
                if (br.ReadInt32() == 4)
                {
                    savegame.IsCompressed = true;
                }

                sr.BaseStream.Seek(4, SeekOrigin.Current);

                var blockCount = br.ReadInt32();
                for (int j = 0; j < blockCount; j++)
                {
                    byte[] fileHeader = new byte[ByteBlockSize];
                    br.Read(fileHeader, 0, ByteBlockSize);
                    var internalName = ByteHandler.GetStringFromBytes(fileHeader, 8);

                    savegame.DataBlockNameList.Add(new DataFile()
                    {
                        InternalName = internalName,
                        FileType     = DataFileFacts.GetDataFileFact(internalName).Type,
                        Position     = ByteHandler.GetIntFromBytes(fileHeader, 0),
                        Length       = ByteHandler.GetIntFromBytes(fileHeader, 4)
                    });
                }
            }
        }
Beispiel #2
0
        private static int GetNumberOfRecordsFromDataFile(DataFile dataFile, int sizeOfData, BinaryReader br, out int startReadPosition)
        {
            int numberOfRecords = dataFile.Length / sizeOfData;

            startReadPosition = dataFile.Position;

            if (dataFile.FileFacts.HeaderOverload != null)
            {
                byte[] header = new byte[dataFile.FileFacts.HeaderOverload.MinimumHeaderLength];
                br.BaseStream.Seek(startReadPosition, SeekOrigin.Begin);
                br.BaseStream.Read(header, 0, dataFile.FileFacts.HeaderOverload.MinimumHeaderLength);
                startReadPosition += dataFile.FileFacts.HeaderOverload.MinimumHeaderLength;

                var numberHeaderRows = ByteHandler.GetIntFromBytes(header, dataFile.FileFacts.HeaderOverload.AdditionalHeaderIndicatorPosition);
                numberOfRecords = ByteHandler.GetIntFromBytes(header, dataFile.FileFacts.HeaderOverload.InitialNumberOfRecordsPosition);
                int furtherNumberOfRecords = 0;

                if (numberHeaderRows > 0)
                {
                    for (int headerLoop = 0; headerLoop < numberHeaderRows; headerLoop++)
                    {
                        header = new byte[dataFile.FileFacts.HeaderOverload.ExtraHeaderLength];
                        br.BaseStream.Seek(startReadPosition, SeekOrigin.Begin);
                        br.BaseStream.Read(header, 0, dataFile.FileFacts.HeaderOverload.ExtraHeaderLength);
                        startReadPosition += dataFile.FileFacts.HeaderOverload.ExtraHeaderLength;
                    }
                    furtherNumberOfRecords = ByteHandler.GetIntFromBytes(header, dataFile.FileFacts.HeaderOverload.FurtherNumberOfRecordsPosition);
                }
                numberOfRecords = furtherNumberOfRecords > 0 ? furtherNumberOfRecords : numberOfRecords;
            }

            return(numberOfRecords);
        }