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; } }