Exemple #1
0
        public void ReplaceFile(FileRecord fileRecord, byte[] data)
        {
            using (var bw = new BinaryWriter(File.Open(_pathToGppk, FileMode.Open)))
            {
                RecordOffsets.Remove(fileRecord.RecordBegin);

                _freeRecordManager.AddFromFileRecord(bw, fileRecord);

                fileRecord.Data = data;

                long position = _freeRecordManager.AllocSpace(bw, fileRecord.Length);
                bw.BaseStream.Position = position;
                fileRecord.WriteData(bw);

                if (!fileRecord.ContainingDirectory.Record.UpdateOffset(bw, fileRecord.GetNameHash(), fileRecord.RecordBegin))
                {
                    throw new ApplicationException("Entry not found!");
                }

                RecordOffsets[fileRecord.RecordBegin] = fileRecord;
            }
        }