Пример #1
0
        public int CompareTo(object obj)
        {
            if (obj is XDvdFsFileStructure)
            {
                XDvdFsFileStructure o = (XDvdFsFileStructure)obj;

                return(this.FileName.CompareTo(o.FileName));
            }

            throw new ArgumentException("object is not an XDvdFsFileStructure");
        }
Пример #2
0
        private void parseDirectoryRecord(
            FileStream isoStream,
            DateTime creationDateTime,
            long baseOffset,
            long recordOffset,
            long logicalBlockSize,
            string parentDirectory,
            bool isRaw,
            int nonRawSectorSize)
        {
            byte recordSize;

            byte[] directoryRecordBytes;
            XDvdFsDirectoryRecord    tempDirectoryRecord;
            XDvdFsDirectoryStructure tempDirectory;
            XDvdFsFileStructure      tempFile;

            long directoryOffset;

            try
            {
                // get the first record
                recordSize           = (byte)(0x0E + ParseFile.ParseSimpleOffset(isoStream, ((long)recordOffset + 0x0D), 1)[0]);
                directoryRecordBytes = ParseFile.ParseSimpleOffset(isoStream, recordOffset, recordSize);
                tempDirectoryRecord  = new XDvdFsDirectoryRecord(directoryRecordBytes);

                if (tempDirectoryRecord.EntryFlags == 0x10 ||
                    tempDirectoryRecord.EntryFlags == 0x90)
                {
                    if (tempDirectoryRecord.EntrySize > 0)
                    {
                        directoryOffset = baseOffset + (long)((long)tempDirectoryRecord.StartingSector * (long)XDvdFs.SECTOR_SIZE);
                        tempDirectory   = new XDvdFsDirectoryStructure(isoStream, isoStream.Name, creationDateTime, baseOffset, directoryOffset, logicalBlockSize, tempDirectoryRecord.EntryName, parentDirectory, isRaw, nonRawSectorSize);
                        this.SubDirectoryArray.Add(tempDirectory);
                    }
                }
                else
                {
                    tempFile = new XDvdFsFileStructure(parentDirectory,
                                                       this.SourceFilePath,
                                                       tempDirectoryRecord.EntryName,
                                                       baseOffset + (long)((long)tempDirectoryRecord.StartingSector * (long)logicalBlockSize),
                                                       baseOffset,
                                                       tempDirectoryRecord.StartingSector,
                                                       tempDirectoryRecord.EntrySize,
                                                       creationDateTime,
                                                       isRaw,
                                                       nonRawSectorSize);
                    this.FileArray.Add(tempFile);
                }

                // Process Left SubTree
                if (tempDirectoryRecord.OffsetToLeftSubTree != 0)
                {
                    this.parseDirectoryRecord(isoStream, creationDateTime,
                                              baseOffset, this.DirectoryRecordOffset + tempDirectoryRecord.OffsetToLeftSubTree,
                                              logicalBlockSize, parentDirectory, isRaw, nonRawSectorSize);
                }

                // Process Right SubTree
                if (tempDirectoryRecord.OffsetToRightSubTree != 0)
                {
                    this.parseDirectoryRecord(isoStream, creationDateTime,
                                              baseOffset, this.DirectoryRecordOffset + tempDirectoryRecord.OffsetToRightSubTree,
                                              logicalBlockSize, parentDirectory, isRaw, nonRawSectorSize);
                }
            }
            catch (Exception ex)
            {
                throw new FormatException(String.Format("Error processing XDVDFS directory record at 0x{0}", recordOffset.ToString("X8")), ex);
            }
        }