public void ExtractFile(CompressedFileRecord objRecord, Stream objOutputStream) { if (objRecord == null) { throw new ArgumentNullException("objRecord", "A valid non-null CompressedFileRecord is required."); } if (objOutputStream == null) { throw new ArgumentNullException("objOutputStream", "A valid non-null Stream is required."); } if (CompressedFileRecordManager.Exists(objRecord) == false) { throw new Exception("A record for '" + objRecord.RelativePath + "' could not be found."); } CompressedFileRecordState enuRecordState = CompressedFileRecordManager.GetRecordState(objRecord); if (enuRecordState == CompressedFileRecordState.Deleted) { throw new Exception("A record for '" + objRecord.RelativePath + "' could not be found."); } ExtractFile(objRecord, enuRecordState, objOutputStream); }
public byte[] ExtractFile(CompressedFileRecord objRecord) { if (objRecord == null) { throw new ArgumentNullException("objRecord", "A valid non-null CompressedFileRecord is required."); } if (CompressedFileRecordManager.Exists(objRecord) == false) { throw new Exception("A record for '" + objRecord.RelativePath + "' could not be found."); } CompressedFileRecordState enuRecordState = CompressedFileRecordManager.GetRecordState(objRecord); if (enuRecordState == CompressedFileRecordState.Deleted) { throw new Exception("A record for '" + objRecord.RelativePath + "' could not be found."); } using (MemoryStream objMemoryStream = new MemoryStream()) { ExtractFile(objRecord, enuRecordState, objMemoryStream); objMemoryStream.Position = 0; return(objMemoryStream.ToArray()); } }
public CompressedFileRecord[] GetRecordsByState(CompressedFileRecordState enuState) { List <CompressedFileRecord> objRecords = new List <CompressedFileRecord>(); foreach (KeyValuePair <CompressedFileRecord, CompressedFileRecordState> objKeyValuePair in SortedRecords) { if ((enuState & objKeyValuePair.Value) == objKeyValuePair.Value) { objRecords.Add(objKeyValuePair.Key); } } return(objRecords.ToArray()); }
private void ExtractFile(CompressedFileRecord objRecord, CompressedFileRecordState enuRecordState, Stream objTargetStream) { if (enuRecordState == CompressedFileRecordState.Inserted) { using (FileStream objDiskFileStream = new FileStream(objRecord.OriginalFilePath, FileMode.Open, FileAccess.Read)) { CompressionManager.CopyToStream(objDiskFileStream, objTargetStream); } } else { int intFileStartIndex = CompressedFileRecordManager.FindFileStartIndex(objRecord); if (intFileStartIndex == -1) { throw new FileNotFoundException("Unable to locate '" + objRecord.RelativeFilePath + "' within package."); } CompressedStream.Position = intFileStartIndex; CompressionManager.Decompress(CompressedStream, objTargetStream, objRecord.Size); } }
public FileInfo ExtractFile(CompressedFileRecord objRecord, string strPath) { if (objRecord == null) { throw new ArgumentNullException("objRecord", "A valid non-null CompressedFileRecord is required."); } if (strPath == null) { throw new ArgumentNullException("strPath", "A valid non-null string is required."); } if (CompressedFileRecordManager.Exists(objRecord) == false) { throw new Exception("A record for '" + objRecord.RelativePath + "' could not be found."); } CompressedFileRecordState enuRecordState = CompressedFileRecordManager.GetRecordState(objRecord); if (enuRecordState == CompressedFileRecordState.Deleted) { throw new Exception("A record for '" + objRecord.RelativePath + "' could not be found."); } string strFilePath = Path.Combine(strPath, objRecord.RelativeFilePath); string strDirectoryPath = Path.GetDirectoryName(strFilePath); if (Directory.Exists(strDirectoryPath) == false) { Directory.CreateDirectory(strDirectoryPath); } using (FileStream objFileStream = new FileStream(strFilePath, FileMode.Create, FileAccess.Write)) { ExtractFile(objRecord, enuRecordState, objFileStream); } FileInfo objFileInfo = new FileInfo(strFilePath); return(objFileInfo); }
public CompressedFileRecordManager(int intFileDataStartingIndex, IEnumerable <CompressedFileRecord> objRecords, CompressedFileRecordState enuInitialState) { FileDataStartingIndex = intFileDataStartingIndex; SortedRecords = new Dictionary <CompressedFileRecord, CompressedFileRecordState>(); foreach (CompressedFileRecord objRecord in objRecords) { SortedRecords.Add(objRecord, enuInitialState); } }