public Gar2Subfile( EndianBinaryReader er, GarHeader header, Gar2FileType fileType, int fileInFileTypeIndex) { er.Position = fileType.FileListOffset + 4 * fileInFileTypeIndex; var fileIndex = er.ReadInt32(); er.Position = header.FileMetadataOffset + 12 * fileIndex; var fileSize = er.ReadInt32(); var fileNameOffset = er.ReadInt32(); var fullPathOffset = er.ReadInt32(); er.Position = fileNameOffset; this.FileName = er.ReadStringNT(); er.Position = fullPathOffset; this.FullPath = er.ReadStringNT(); er.Position = header.DataOffset + 4 * fileIndex; var fileOffset = er.ReadInt32(); er.Position = fileOffset; this.Bytes = er.ReadBytes(Math.Max(fileSize, 0)); }
public Gar5FileType( EndianBinaryReader er, GarHeader header, int fileTypeIndex) { er.Position = header.FileTypesOffset + 8 * 4 * fileTypeIndex; this.FileCount = er.ReadUInt32(); er.ReadUInt32(); this.FirstFileIndex = er.ReadInt32(); this.TypeNameOffset = er.ReadInt32(); er.ReadInt32(); er.ReadUInt32(); er.ReadUInt32(); er.ReadUInt32(); er.Position = this.TypeNameOffset; this.TypeName = er.ReadStringNT(); this.Files = new IGarSubfile[this.FileCount]; for (var i = 0; i < this.FileCount; ++i) { this.Files[i] = new Gar5Subfile(er, header, this, i); } }
public Gar2FileType( EndianBinaryReader er, GarHeader header, int fileTypeIndex) { er.Position = header.FileTypesOffset + 16 * fileTypeIndex; this.FileCount = er.ReadInt32(); this.FileListOffset = er.ReadInt32(); this.TypeNameOffset = er.ReadInt32(); er.ReadInt32(); er.Position = this.TypeNameOffset; this.TypeName = er.ReadStringNT(); this.Files = new IGarSubfile[Math.Max(0, this.FileCount)]; for (var i = 0; i < this.FileCount; ++i) { this.Files[i] = new Gar2Subfile(er, header, this, i); } }
public Gar5Subfile( EndianBinaryReader er, GarHeader header, Gar5FileType fileType, int fileInFileTypeIndex) { er.Position = header.FileMetadataOffset + (fileType.FirstFileIndex + fileInFileTypeIndex) * 4 * 4; var fileSize = er.ReadInt32(); var fileOffset = er.ReadUInt32(); var fileNameOffset = er.ReadInt32(); var fullPathOffset = er.ReadInt32(); er.Position = fullPathOffset != -1 ? fullPathOffset : fileNameOffset; this.FileName = er.ReadStringNT(); if (Path.GetExtension(this.FileName) == string.Empty) { this.FileName += $".{fileType.TypeName}"; } er.Position = fileOffset; this.Bytes = er.ReadBytes(fileSize); }