public VolumeDescriptor(byte[] b, ISO9660 iso) : base(b) { VolumeFlags = b[7]; SystemIdentifier = Encoding.ASCII.GetString(b, 8, 32).Trim(); VolumeIdentifier = getencoding.GetString(b, 40, 32).Trim(); VolumeSpaceSize = BitConverter.ToUInt32(b, 80); VolumeSetSize = BitConverter.ToUInt16(b, 120); VolumeSequenceNumber = BitConverter.ToUInt16(b, 124); LogicalBlockSize = BitConverter.ToUInt16(b, 128); PathTableSize = BitConverter.ToUInt32(b, 132); TypeLPathTable = BitConverter.ToUInt32(b, 140); OptTypeLPathTable = BitConverter.ToUInt32(b, 144); TypeMPathTable = Swap(BitConverter.ToUInt32(b, 148)); OptTypeMPathTable = Swap(BitConverter.ToUInt32(b, 152)); DirectoryRecord = new DirectoryRecord(ToByteArray(b, 156, 34), 0, getencoding, iso); VolumeSetIdentifier = getencoding.GetString(b, 190, 128).Trim(); PublisherIdentifier = Encoding.ASCII.GetString(b, 318, 128).Trim(); DataPreparerIdentifier = Encoding.ASCII.GetString(b, 446, 128).Trim(); ApplicationIdentifier = Encoding.ASCII.GetString(b, 574, 128).Trim(); CopyrightFileIdentifier = getencoding.GetString(b, 702, 36).Trim(); AbstractFileIdentifier = getencoding.GetString(b, 739, 36).Trim(); BibliographicFileIdentifier = getencoding.GetString(b, 776, 36).Trim(); VolumeCreationDateandTime = getDate(ToByteArray(b, 813, 16)); VolumeModificationDateandTime = getDate(ToByteArray(b, 830, 16)); VolumeExpirationDateandTime = getDate(ToByteArray(b, 847, 16)); VolumeEffectiveDateandTime = getDate(ToByteArray(b, 864, 16)); FileStructureVersion = b[881]; }
public DirectoryRecord(byte[] buffer, int offset, Encoding enc, ISO9660 reader) { name = ""; fullname = ""; FileVersion = 0; directorys = new Dictionary <string, DirectoryRecord>(); files = new Dictionary <string, DirectoryRecord>(); checked { recordLength = buffer[0 + offset]; if (recordLength > 0) { sectorsInExtendedRecord = buffer[1 + offset]; firstDataSector = BitConverter.ToUInt32(buffer, 2 + offset); dataLength = BitConverter.ToUInt32(buffer, 10 + offset); try { DateTime dateTime = new DateTime(1900 + unchecked ((int)buffer[checked (18 + offset)]), buffer[19 + offset], buffer[20 + offset], buffer[21 + offset], buffer[22 + offset], buffer[23 + offset]); DateTime dateTime2 = dateTime; RecordingDateAndTime = dateTime2.AddHours(4 *unchecked ((int)buffer[checked (24 + offset)])); } catch (Exception projectError) { ProjectData.SetProjectError(projectError); RecordingDateAndTime = DateTime.Now; ProjectData.ClearProjectError(); } unchecked { flags = (FileFlags)buffer[checked (25 + offset)]; } fileUnitSize = buffer[26 + offset]; interleaveGap = buffer[27 + offset]; volSeqNumber = BitConverter.ToUInt16(buffer, 28 + offset); nameLength = buffer[32 + offset]; if (nameLength == 1 && (buffer[33 + offset] == 0 || buffer[33 + offset] == 1)) { if (buffer[33 + offset] == 0) { name = "."; } else { name = ".."; } } else { name = enc.GetString(buffer, 33 + offset, nameLength); if (Strings.InStr(name, ";") != 0) { FileVersion = (byte)Conversions.ToInteger(Strings.Split(name, ";")[1]); name = Strings.Split(name, ";")[0]; } } isDirectory = Conversions.ToBoolean(Interaction.IIf(flags == FileFlags.Directory, true, false)); } _Length = dataLength; currentSector = (int)firstDataSector; currentOffset = 0L; sectorOffset = 0; internalReader = reader; blocksize = reader.Blocksize; } }