////public static int ReadFrom(byte[] src, int offset, bool byteSwap, Encoding enc, out PathTableRecord record) ////{ //// byte directoryIdentifierLength = src[offset + 0]; //// record.ExtendedAttributeRecordLength = src[offset + 1]; //// record.LocationOfExtent = Utilities.ToUInt32LittleEndian(src, offset + 2); //// record.ParentDirectoryNumber = Utilities.ToUInt16LittleEndian(src, offset + 6); //// record.DirectoryIdentifier = IsoUtilities.ReadChars(src, offset + 8, directoryIdentifierLength, enc); //// //// if (byteSwap) //// { //// record.LocationOfExtent = Utilities.BitSwap(record.LocationOfExtent); //// record.ParentDirectoryNumber = Utilities.BitSwap(record.ParentDirectoryNumber); //// } //// //// return directoryIdentifierLength + 8 + (((directoryIdentifierLength & 1) == 1) ? 1 : 0); ////} internal int Write(bool byteSwap, Encoding enc, byte[] buffer, int offset) { int nameBytes = enc.GetByteCount(DirectoryIdentifier); buffer[offset + 0] = (byte)nameBytes; buffer[offset + 1] = 0; // ExtendedAttributeRecordLength; IsoUtilities.ToBytesFromUInt32(buffer, offset + 2, byteSwap ? Utilities.BitSwap(LocationOfExtent) : LocationOfExtent); IsoUtilities.ToBytesFromUInt16(buffer, offset + 6, byteSwap ? Utilities.BitSwap(ParentDirectoryNumber) : ParentDirectoryNumber); IsoUtilities.WriteString(buffer, offset + 8, nameBytes, false, DirectoryIdentifier, enc); if ((nameBytes & 1) == 1) { buffer[offset + 8 + nameBytes] = 0; } return((int)(8 + nameBytes + (((nameBytes & 0x1) == 1) ? 1 : 0))); }