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"); }
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); } }