Example #1
0
        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 */
Example #2
0
        } /* 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 */
Example #3
0
        public ParseSipperLog(string _fileName)
        {
            fileName          = _fileName;
            fileControlBlocks = new SipperFileControlBlockList();

            StreamReader sr = OpenLogFile();

            if (sr != null)
            {
                ParseFile(sr);
            }

            sr.Close();
            sr = null;
        }
Example #4
0
        } /* 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 */