public static int ReadFrom(byte[] src, int offset, Encoding enc, out DirectoryRecord record) { int length = src[offset + 0]; record = new DirectoryRecord(); record.ExtendedAttributeRecordLength = src[offset + 1]; record.LocationOfExtent = IsoUtilities.ToUInt32FromBoth(src, offset + 2); record.DataLength = IsoUtilities.ToUInt32FromBoth(src, offset + 10); record.RecordingDateAndTime = IsoUtilities.ToUTCDateTimeFromDirectoryTime(src, offset + 18); record.Flags = (FileFlags)src[offset + 25]; record.FileUnitSize = src[offset + 26]; record.InterleaveGapSize = src[offset + 27]; record.VolumeSequenceNumber = IsoUtilities.ToUInt16FromBoth(src, offset + 28); byte lengthOfFileIdentifier = src[offset + 32]; record.FileIdentifier = IsoUtilities.ReadChars(src, offset + 33, lengthOfFileIdentifier, enc); int padding = (lengthOfFileIdentifier & 1) == 0 ? 1 : 0; int startSystemArea = lengthOfFileIdentifier + padding + 33; int lenSystemArea = length - startSystemArea; if (lenSystemArea > 0) { record.SystemUseData = new byte[lenSystemArea]; Array.Copy(src, offset + startSystemArea, record.SystemUseData, 0, lenSystemArea); } return(length); }
private DateTime ReadTimestamp(Timestamps timestamp, byte[] data, bool longForm, ref int pos) { DateTime result = DateTime.MinValue; if ((TimestampsPresent & timestamp) != 0) { if (longForm) { result = IsoUtilities.ToDateTimeFromVolumeDescriptorTime(data, pos); pos += 17; } else { result = IsoUtilities.ToUTCDateTimeFromDirectoryTime(data, pos); pos += 7; } } return(result); }