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); }
public ResourcePackFile(string gameFile) { GameResourceFile = gameFile; ResourcesFileStream = File.OpenRead(gameFile); _fileSignature = ResourcesFileStream.ReadBytes(4); _fileListDataSize = ResourcesFileStream.Read <uint>(); }
public void Dispose() { ResourcesFileStream.Dispose(); }
public async Task <byte[]> ReadFileFromStreamAsync(IPackedFileInfo resourcePackFile) { ResourcesFileStream.Position = FILE_LIST_OFFSET + _fileListDataSize + resourcePackFile.Offset; return(await ResourcesFileStream.ReadBytesAsync((int)resourcePackFile.Size)); }