Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
        }