public Archive(string fileName) { FileName = fileName; using (System.IO.FileStream stream = System.IO.File.Open(FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read)) { CFHEADER header = CFHEADER.FromStream(stream); int dataBlocks = 0; for (int i = 0; i < header.CFHEADER_FIXED.cFolders; i++) { CFFOLDER folder = CFFOLDER.FromStream(stream, header); m_folders.Add(folder); dataBlocks += folder.cCFData; } stream.Seek(header.CFHEADER_FIXED.coffFiles, System.IO.SeekOrigin.Begin); for (int i = 0; i < header.CFHEADER_FIXED.cFiles; i++) { CFFILE file = CFFILE.FromStream(stream); m_files.Add(file); } stream.Close(); } }
internal static CFDATA FromStream(FileStream stream, CFHEADER header) { CFDATA cfdata = new CFDATA(); BinaryReader reader = new BinaryReader(stream); cfdata.csum = reader.ReadUInt32(); cfdata.cbData = reader.ReadUInt16(); cfdata.cbUncomp = reader.ReadUInt16(); cfdata.abReserve = reader.ReadBytes(header.CFHEADER_OPTIONAL.cbCFData); cfdata.ab = reader.ReadBytes(cfdata.cbData); return(cfdata); }
internal static CFFOLDER FromStream(FileStream stream, CFHEADER header) { CFFOLDER folder = new CFFOLDER(); BinaryReader reader = new BinaryReader(stream); folder.coffCabStart = reader.ReadUInt32(); folder.cCFData = reader.ReadUInt16(); folder.typeCompress = reader.ReadUInt16(); if (((header.CFHEADER_FIXED.flags & CFHEADER_FLAGS.RESERVE_PRESENT) == CFHEADER_FLAGS.RESERVE_PRESENT) && header.CFHEADER_OPTIONAL.cbCFFolder != 0) { folder.abReserve = reader.ReadBytes(header.CFHEADER_OPTIONAL.cbCFFolder); } return(folder); }