/** * Writes an array of {@link Property} instances To an output stream * according To the Horrible Property Format. * * @param out The stream To Write To * @param properties The array To Write To the stream * @param codepage The codepage number To use for writing strings * @exception IOException if an I/O error occurs * @throws UnsupportedVariantTypeException if HPSF does not support some * variant type. */ public static void WriteToStream(Stream out1, Property[] properties, int codepage) { /* If there are no properties don't Write anything. */ if (properties == null) { return; } /* Write the property list. This is a list containing pairs of property * ID and offset into the stream. */ for (int i = 0; i < properties.Length; i++) { Property p = properties[i]; WriteUIntToStream(out1, (uint)p.ID); WriteUIntToStream(out1, (uint)p.Count); } /* Write the properties themselves. */ for (int i = 0; i < properties.Length; i++) { Property p = properties[i]; long type = p.Type; WriteUIntToStream(out1, (uint)type); VariantSupport.Write(out1, (int)type, p.Value, codepage); } }
/// <summary> /// Writes the property To an output stream. /// </summary> /// <param name="out1">The output stream To Write To.</param> /// <param name="codepage">The codepage To use for writing non-wide strings</param> /// <returns>the number of bytes written To the stream</returns> public int Write(Stream out1, int codepage) { int length = 0; long variantType = this.Type; /* Ensure that wide strings are written if the codepage is Unicode. */ if (codepage == CodePageUtil.CP_UNICODE && variantType == Variant.VT_LPSTR) { variantType = Variant.VT_LPWSTR; } length += TypeWriter.WriteUIntToStream(out1, (uint)variantType); length += VariantSupport.Write(out1, variantType, this.Value, codepage); return(length); }