public void Read(string fileName) { using (var fileStream = File.OpenRead(fileName)) { using (var reader = new BinaryReader(fileStream, Encoding.Default)) { var header = new ParadoxFileHeader(); header.Read(reader); ReadBlocks(header, reader); } } }
private void ReadBlocks(ParadoxFileHeader header, BinaryReader reader) { reader.BaseStream.Seek(0L, SeekOrigin.Begin); try { /* * skip to the first block */ reader.ReadBytes(header.BlockSizeBytes); /* * walk blocks */ int blocksInUse = header.BlocksInUse; for (int i = 0; i < blocksInUse; i++) { /* * block */ var pdxTableBlock = new ParadoxTableBlock(i + 1, header.CalculateRecordsPerBlock(), header.Fields); var streamPos = reader.BaseStream.Position; /* * read the block data */ pdxTableBlock.Read(reader); /* * store it. blocks are numbered from 1, not from 0. */ blocks.Add(pdxTableBlock.BlockNumber, pdxTableBlock); /* * reset to the start of the block */ reader.BaseStream.Seek(streamPos, SeekOrigin.Begin); /* * skip ahead to next block */ reader.ReadBytes(header.BlockSizeBytes); } } catch (Exception ex) { throw new Exception("Exception in readBlocks", ex); } }