internal OLEPropertiesContainer(CFStream cfStream) { PropertySetStream pStream = new PropertySetStream(); this.cfStream = cfStream; pStream.Read(new BinaryReader(new StreamDecorator(cfStream))); switch (pStream.FMTID0.ToString("B").ToUpperInvariant()) { case "{F29F85E0-4FF9-1068-AB91-08002B27B3D9}": this.ContainerType = ContainerType.SummaryInfo; break; case "{D5CDD502-2E9C-101B-9397-08002B2CF9AE}": this.ContainerType = ContainerType.DocumentSummaryInfo; break; default: this.ContainerType = ContainerType.AppSpecific; break; } this.PropertyNames = (Dictionary <uint, string>)pStream.PropertySet0.Properties .Where(p => p.PropertyType == PropertyType.DictionaryProperty).FirstOrDefault(); this.Context = new PropertyContext() { CodePage = pStream.PropertySet0.PropertyContext.CodePage }; for (int 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) { VTType = p.VTType, PropertyIdentifier = (uint)pStream.PropertySet0.PropertyIdentifierAndOffsets[i].PropertyIdentifier, Value = p.Value }; properties.Add(op); } if (pStream.NumPropertySets == 2) { UserDefinedProperties = new OLEPropertiesContainer(this.Context.CodePage, ContainerType.UserDefinedProperties); this.HasUserDefinedProperties = true; UserDefinedProperties.ContainerType = ContainerType.UserDefinedProperties; for (int 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 = (uint)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; } }
internal OLEProperty(OLEPropertiesContainer container) { this.container = container; }