PackUriHelper.ResolvePartUri Method (Uri, Uri)

 

Returns a part URI given a source part URI and a URI with a relative path to a target part.

Namespace:   System.IO.Packaging
Assembly:  WindowsBase (in WindowsBase.dll)

public static Uri ResolvePartUri(
	Uri sourcePartUri,
	Uri targetUri
)

Parameters

sourcePartUri
Type: System.Uri

The URI of the source part, or "/" to designate the Package root.

targetUri
Type: System.Uri

The relative URI to the target part.

Return Value

Type: System.Uri

The URI of the target part resolved between the specified SourcePartUri and the targetUri parameters.

Exception Condition
ArgumentNullException

sourcePartUri or targetUri is null.

ArgumentException

sourcePartUri is not a valid part URI.

-or-

targetUri is not a valid relative URI.

The following table illustrates sample cases for ResolvePartUri.

 sourcePartUri

 targetUri

 Returned URI 

 /mydoc/markup/page.xml 

 picture.jpg 

 /mydoc/markup/picture.jpg 

 /mydoc/markup/page.xml 

 images/picture.jpg 

 /mydoc/markup/images/picture.jpg 

 /mydoc/markup/page.xml 

 ./picture.jpg 

 /mydoc/markup/picture.jpg 

 /mydoc/markup/page.xml 

 ../picture.jpg 

 /mydoc/picture.jpg 

 /mydoc/markup/page.xml 

 ../images/picture.jpg 

 /mydoc/images/picture.jpg 

 / 

 images/picture.jpg 

 /images/picture.jpg 

The following example shows how to use the ResolvePartUri method. For the complete sample, see Reading a Package Sample.

// Open the Package.
// ('using' statement insures that 'package' is
//  closed and disposed when it goes out of scope.)
using (Package package =
    Package.Open(packagePath, FileMode.Open, FileAccess.Read))
{
    PackagePart documentPart = null;
    PackagePart resourcePart = null;

    // Get the Package Relationships and look for
    //   the Document part based on the RelationshipType
    Uri uriDocumentTarget = null;
    foreach (PackageRelationship relationship in
        package.GetRelationshipsByType(PackageRelationshipType))
    {
        // Resolve the Relationship Target Uri
        //   so the Document Part can be retrieved.
        uriDocumentTarget = PackUriHelper.ResolvePartUri(
            new Uri("/", UriKind.Relative), relationship.TargetUri);

        // Open the Document Part, write the contents to a file.
        documentPart = package.GetPart(uriDocumentTarget);
        ExtractPart(documentPart, targetDirectory);
    }

    // Get the Document part's Relationships,
    //   and look for required resources.
    Uri uriResourceTarget = null;
    foreach (PackageRelationship relationship in
        documentPart.GetRelationshipsByType(
                                ResourceRelationshipType))
    {
        // Resolve the Relationship Target Uri
        //   so the Resource Part can be retrieved.
        uriResourceTarget = PackUriHelper.ResolvePartUri(
            documentPart.Uri, relationship.TargetUri);

        // Open the Resource Part and write the contents to a file.
        resourcePart = package.GetPart(uriResourceTarget);
        ExtractPart(resourcePart, targetDirectory);
    }

}// end:using(Package package) - Close & dispose package.

.NET Framework
Available since 3.0
Return to top
Show: