/// <summary> /// Return the current <see cref="T:OpenMcdf.CFStream">CFStream</see> object /// as a OLE properties Stream. /// </summary> /// <param name="cfStream"></param> /// <returns>A <see cref="T:OpenMcdf.OLEProperties.PropertySetStream">OLE Propertie stream</see></returns> public static OLEProperties.PropertySetStream AsOLEProperties(this CFStream cfStream) { var result = new OLEProperties.PropertySetStream(); result.Read(new BinaryReader(new StreamDecorator(cfStream))); return(result); }
internal OLEPropertiesContainer(CFStream cfStream) { var pStream = new PropertySetStream(); this.cfStream = cfStream; pStream = new PropertySetStream(); pStream.Read(new BinaryReader(new StreamDecorator(cfStream))); switch (pStream.FMTID0.ToString("B").ToUpperInvariant()) { case "{F29F85E0-4FF9-1068-AB91-08002B27B3D9}": ContainerType = ContainerType.SummaryInfo; break; case "{D5CDD502-2E9C-101B-9397-08002B2CF9AE}": ContainerType = ContainerType.DocumentSummaryInfo; break; default: ContainerType = ContainerType.AppSpecific; break; } PropertyNames = (Dictionary <uint, string>)pStream.PropertySet0.Properties .FirstOrDefault(p => p.PropertyType == PropertyType.DictionaryProperty); Context = new PropertyContext { CodePage = pStream.PropertySet0.PropertyContext.CodePage }; for (var i = 0; i < pStream.PropertySet0.Properties.Count; i++) { if (pStream.PropertySet0.PropertyIdentifierAndOffsets[i].PropertyIdentifier == 0) { continue; } //if (pStream.PropertySet0.PropertyIdentifierAndOffsets[i].PropertyIdentifier == 1) continue; //if (pStream.PropertySet0.PropertyIdentifierAndOffsets[i].PropertyIdentifier == 0x80000000) continue; var p = (ITypedPropertyValue)pStream.PropertySet0.Properties[i]; var poi = pStream.PropertySet0.PropertyIdentifierAndOffsets[i]; var op = new OLEProperty(this); op.VTType = p.VTType; op.PropertyIdentifier = pStream.PropertySet0.PropertyIdentifierAndOffsets[i].PropertyIdentifier; op.Value = p.Value; properties.Add(op); } if (pStream.NumPropertySets == 2) { UserDefinedProperties = new OLEPropertiesContainer(Context.CodePage, ContainerType.UserDefinedProperties); HasUserDefinedProperties = true; UserDefinedProperties.ContainerType = ContainerType.UserDefinedProperties; for (var i = 0; i < pStream.PropertySet1.Properties.Count; i++) { if (pStream.PropertySet1.PropertyIdentifierAndOffsets[i].PropertyIdentifier == 0) { continue; } //if (pStream.PropertySet1.PropertyIdentifierAndOffsets[i].PropertyIdentifier == 1) continue; if (pStream.PropertySet1.PropertyIdentifierAndOffsets[i].PropertyIdentifier == 0x80000000) { continue; } var p = (ITypedPropertyValue)pStream.PropertySet1.Properties[i]; var poi = pStream.PropertySet1.PropertyIdentifierAndOffsets[i]; var op = new OLEProperty(UserDefinedProperties); op.VTType = p.VTType; op.PropertyIdentifier = pStream.PropertySet1.PropertyIdentifierAndOffsets[i].PropertyIdentifier; op.Value = p.Value; UserDefinedProperties.properties.Add(op); } UserDefinedProperties.PropertyNames = (Dictionary <uint, string>)pStream.PropertySet1.Properties .Where(p => p.PropertyType == PropertyType.DictionaryProperty).FirstOrDefault()?.Value; } }