public static async Task <List <BSA105FolderRecord> > ReadFolderRecords(Stream stream, BSA105Header header) { stream.Seek(BSA105Header.HeaderSize, SeekOrigin.Begin); var recordBytes = new byte[BSA105FolderRecord.FolderRecordSize * header.FolderCount]; var records = new List <BSA105FolderRecord>((int)header.FolderCount); await stream.ReadAsync(recordBytes, 0, recordBytes.Length); for (int i = 0; i < header.FolderCount; i++) { var record = BSA105FolderRecord.Parse(recordBytes, i * BSA105FolderRecord.FolderRecordSize); records.Add(record); } return(records); }
public static async Task <FileRecordBlock> ReadFileRecordBlock(Stream stream, BSA105Header header, BSA105FolderRecord folder) { stream.Seek(folder.FileRecordOffset - header.TotalFileNameLength, SeekOrigin.Begin); var nameLength = stream.ReadByte(); var blockBytes = new byte[nameLength + 1 + (folder.FileCount * FileRecord.ByteSize)]; await stream.ReadAsync(blockBytes, 1, blockBytes.Length - 1); blockBytes[0] = (byte)nameLength; return(FileRecordBlock.Parse(blockBytes, 0, (int)folder.FileCount)); }