コード例 #1
0
            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));
            }
コード例 #2
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);
                }
            }
コード例 #3
0
            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);
                }
            }
コード例 #4
0
            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);
            }