Example #1
0
 //We needed to separate the rels parts from the other parts
 //because if a rels part for a part occurred earlier than the part itself in the array,
 //the rels part would be closed and then when close the part and try to persist the relationships
 //for the particular part, it would throw an exception
 private bool DoClose(PackagePart p)
 {
     if (!p.IsClosed)
     {
         if (PackUriHelper.IsRelationshipPartUri(p.Uri) && PackUriHelper.ComparePartUri(p.Uri, PackageRelationship.ContainerRelationshipPartName) != 0)
         {
             //First we close the source part.
             //Note - we can safely do this as DoClose is being called on all parts. So ultimately we will end up
             //closing the source part as well.
             //This logic only takes care of out of order parts.
             PackUriHelper.ValidatedPartUri owningPartUri =
                 (PackUriHelper.ValidatedPartUri)PackUriHelper.GetSourcePartUriFromRelationshipPartUri(p.Uri);
             //If the source part for this rels part exists then we close it.
             PackagePart sourcePart;
             if (_partList.TryGetValue(owningPartUri, out sourcePart))
                 sourcePart.Close();
         }
         p.Close();
     }
     return true;
 }