public void Dispose() { if (openedSipperFiles != null) { // Close all SipperDiskFiles that are still opened. while (openedSipperFiles.Count > 0) { SipperDiskFile sdf = openedSipperFiles[0]; sdf.Close(); //The close method will call 'CloseSipperDiskFile' which will remove from 'openedSipperFiles' list. sdf.Dispose(); sdf = null; } } BlockStart(); if (fs != null) { CloseHandleToPhysicalDisk(); } if (mbr != null) { mbr.Dispose(); mbr = null; } BlockEnd(); sipperFiles = null; } /* Dispose */
} /* GetListOfSipperFiles */ private void GetListOfSipperFilesFromLogFiles(string dirName) { sipperFiles = new SipperFileControlBlockList(); DirectoryInfo di = new DirectoryInfo(dirName); FileInfo[] files = di.GetFiles(); foreach (FileInfo fi in files) { if (fi.Extension != ".txt") { continue; } if (!(fi.Name.StartsWith("SipperInterfaceLog_"))) { continue; } ParseSipperLog logFileParsed = new ParseSipperLog(fi.FullName); SipperFileControlBlockList filesInLogFile = logFileParsed.FileControlBlocks(); foreach (SipperFileControlBlock fcb in filesInLogFile) { bool fcbMerged = false; if (sipperFiles.Count > 0) { SipperFileControlBlock lastBlock = sipperFiles[sipperFiles.Count - 1]; if (fcb.FileName == lastBlock.FileName) { lastBlock.EndSector = Math.Max(lastBlock.EndSector, fcb.EndSector); lastBlock.StartSector = Math.Min(lastBlock.StartSector, fcb.StartSector); fcbMerged = true; if (lastBlock.EndSector > lastSectorUsed) { lastSectorUsed = lastBlock.EndSector; } } } if (!fcbMerged) { fcb.FcbIndex = sipperFiles.Count; sipperFiles.Add(fcb); if (fcb.EndSector > lastSectorUsed) { lastSectorUsed = fcb.EndSector; } } } } return; } /* GetListOfSipperFilesFromLogFiles */
public ParseSipperLog(string _fileName) { fileName = _fileName; fileControlBlocks = new SipperFileControlBlockList(); StreamReader sr = OpenLogFile(); if (sr != null) { ParseFile(sr); } sr.Close(); sr = null; }
} /* OpenSipperDrive */ private void GetListOfSipperFiles() { totalSectorsUsed = Constants.MAX_SIPPER_FILES + 1; // 1 Sector for each posible file + 1 sector for the SipperPartitionSector sipperFiles = new SipperFileControlBlockList(); Int64 sipperDirectorySectorByteOffset = mbr.GetSipperDirectoryByteOffset(); fs.Seek(sipperDirectorySectorByteOffset, SeekOrigin.Begin); for (int i = 0; i < Constants.MAX_SIPPER_FILES; i++) { SipperFileControlBlock fcb = SipperFileControlBlock.CreateFromFileStream(fs); if (fcb == null) { throw new Exception("Error reading Sipper FileControlBlock"); } fcb.FcbIndex = i; if (fcb.EndSector <= 0) { if (fcb.Allocated != SipperFileControlBlock.SIPPER_FILE_FREE) { sipperFiles.Add(fcb); lastSectorUsed = Math.Max(fcb.EndSector, lastSectorUsed); totalSectorsUsed += 1 + fcb.EndSector - fcb.StartSector; } } else if (fcb.EndSector > 0) { sipperFiles.Add(fcb); lastSectorUsed = Math.Max(fcb.EndSector, lastSectorUsed); totalSectorsUsed += 1 + fcb.EndSector - fcb.StartSector; } } return; } /* GetListOfSipperFiles */