public XlsFat(XlsHeader hdr, List<uint> sectors, int sizeOfSector, bool isMini, XlsRootDirectory rootDir){
m_sectorSize = sizeOfSector;
m_isMini=isMini;
m_rootDir=rootDir;
m_hdr=hdr;
m_sectors_for_fat=sectors.Count;
sizeOfSector=hdr.SectorSize;
uint prevSector=0;
//calc offset of stream . If mini stream then find mini stream container stream
//long offset = 0;
//if (rootDir != null)
// offset = isMini ? (hdr.MiniFatFirstSector + 1) * hdr.SectorSize : 0;
var buff=new byte[sizeOfSector];
Stream file=hdr.FileStream;
using (var ms=new MemoryStream(sizeOfSector*m_sectors_for_fat)) {
lock (file) {
foreach (uint sector in sectors){
if (prevSector==0||(sector-prevSector)!=1){
file.Seek((sector+1)*sizeOfSector, SeekOrigin.Begin);
}
prevSector=sector;
file.Read(buff, 0, sizeOfSector);
ms.Write(buff, 0, sizeOfSector);
}
}
ms.Seek(0, SeekOrigin.Begin);
var rd=new BinaryReader(ms);
m_sectors=(int)ms.Length/4;
m_fat=new List<uint>(m_sectors);
for (int i=0; i<m_sectors; i++)
m_fat.Add(rd.ReadUInt32());
rd.Close();
ms.Close();
}
}