示例#1
0
        public IPackedFileInfo[] ReadPackedFiles()
        {
            ResourcesFileStream.Position = FILE_LIST_OFFSET;

            var packedFiles = new IPackedFileInfo[PackedFileCount];

            for (var x = 0; x < packedFiles.Length; x++)
            {
                packedFiles[x] = new PackedFileInfo {
                    Name = Encoding.UTF8.GetString(ResourcesFileStream.ReadBytes(16)).Split('\0')[0]
                           ?? throw new Exception("Packed file name could not be read."),

                                 Offset = ResourcesFileStream.Read <uint>(),
                                 Size   = ResourcesFileStream.Read <uint>(),
                };

                var currentReadPosition = ResourcesFileStream.Position;
                ResourcesFileStream.Position = packedFiles[x].Offset;
                packedFiles[x].Extension     = ResourcePackType.GetFileType(ResourcesFileStream.ReadBytes(16));
                ResourcesFileStream.Position = currentReadPosition;

                // Fix reader alignment.
                ResourcesFileStream.Read <long>();
            }
            return(packedFiles);
        }
示例#2
0
        public ResourcePackFile(string gameFile)
        {
            GameResourceFile    = gameFile;
            ResourcesFileStream = File.OpenRead(gameFile);

            _fileSignature    = ResourcesFileStream.ReadBytes(4);
            _fileListDataSize = ResourcesFileStream.Read <uint>();
        }
示例#3
0
 public void Dispose()
 {
     ResourcesFileStream.Dispose();
 }
示例#4
0
 public async Task <byte[]> ReadFileFromStreamAsync(IPackedFileInfo resourcePackFile)
 {
     ResourcesFileStream.Position = FILE_LIST_OFFSET + _fileListDataSize + resourcePackFile.Offset;
     return(await ResourcesFileStream.ReadBytesAsync((int)resourcePackFile.Size));
 }