Package クラス
複数のデータ オブジェクトを格納できるコンテナを表します。

名前空間: System.IO.Packaging
アセンブリ: WindowsBase (windowsbase.dll 内)

構文

Visual Basic (宣言)
Public MustInherit Class Package
	Implements IDisposable
Visual Basic (使用法)
Dim instance As Package
C#
public abstract class Package : IDisposable
C++
public ref class Package abstract : IDisposable
J#
public abstract class Package implements IDisposable
JScript
public abstract class Package implements IDisposable
XAML
このクラスは抽象クラスです。XAML で使用できる派生した非抽象クラスについては、継承階層 を参照してください。
解説

Package は、移植性と効率的なアクセスを実現するために、定義済みの物理形式の単一エンティティへオブジェクトを編成する場合に使用できる抽象クラスです。

ZIP ファイルは、Package の主要な物理形式です。他の Package 実装では、XML ドキュメント、データベース、Web サービスなどの別の物理形式を使用することもできます。

ファイル システムと同様に、Package に含まれている項目は、フォルダおよびファイルの階層的な編成で参照されます。

Package 自体は抽象クラスですが、ZipPackage 派生クラスは、Open メソッドで既定として使用されます。

PackagePart ("パーツ") は、Package に格納されるオブジェクトを表す抽象クラスです。

PackageRelationship ("リレーションシップ") は、ソースの Package または PackagePart と、ターゲット オブジェクトの間の関連付けを定義します。PackageRelationship には、次の 2 つの種類があります。またそれぞれの種類には、2 つの形式があります。

  • パッケージ レベル リレーションシップ (Package.CreateRelationship によって作成されます)。

    • Package およびパッケージ内部のターゲット パーツ間。

    • Package およびパッケージ外部のターゲット リソース間。

  • パーツ レベル リレーションシップ (PackagePart.CreateRelationship によって作成されます)。

    • ソースの PackagePart およびパッケージ内部の別のターゲット パーツ間。

    • ソース PackagePart およびパッケージ外部のターゲット リソース間。

リレーションシップのソース Package またはソース PackagePart は、リレーションシップの "所有者" と見なされます。ソース オブジェクトが削除されると、ソース オブジェクトによって所有されているリレーションシップもすべて削除されます。リレーションシップを作成または削除しても、ソース オブジェクトやターゲット オブジェクトは物理的には変更されません。

PackageDigitalSignature ("デジタル署名") は、Package に含まれるデジタル署名を表すパーツおよびリレーションシップで構成されます。デジタル署名は、発行元を識別し、Package に含まれている署名付きのパーツおよびリレーションシップが変更されていないことを確認します。

パッケージはデジタル著作権管理 (DRM) もサポートします。これを使用すると、承認済みユーザーに付与されている特定のアクセス権を使用して、Package のコンテンツ要素を暗号化することができます。

Package アーキテクチャに基づく XpsDocument は、オープンな XML Paper Specification (XPS) に基づいてドキュメントを格納するために設計されたパッケージ タイプです。

Microsoft .NET Framework Version 3.0 は、既定では標準の ZIP ファイルを利用し、パッケージを作成することによって、ページやドキュメントのコンテンツ、リソース、およびリレーションシップを格納します。すべての ZIP ファイルと同様に、アプリケーションでは System.IO.Packaging クラスを使用して、任意の種類または数のデータ ファイルを、効率的にアクセスできる単一のコンテナに格納できます。また、オプションでコンテナの内容を保護することもできます。

詳細については、『Open Packaging Conventions (OPC)』仕様を参照してください。このドキュメントは、http://go.microsoft.com/fwlink/?LinkID=71255 からダウンロードできます

使用例

Package を作成するための基本手順を次の例に示します。この例では、ドキュメントおよびドキュメントの一部として表示されるグラフィック イメージを含むパッケージを作成します (これは外部イメージ ファイルを参照する <IMG> タグを含む HTML ファイルのようなものです)。2 つの PackageRelationship 要素もパッケージに含まれます。1 つ目の "パッケージ レベル" リレーションシップは、ドキュメント パーツをパッケージのルート要素として定義します。2 つ目の "パーツ レベル" リレーションシップは、ドキュメント パーツ (パーツ レベル リレーションシップの "ソース") と、ドキュメント パーツが使用するイメージ パーツ (パーツ レベル リレーションシップの "ターゲット") の間の関連付けを定義します。サンプル全体については、「パッケージの書き込みのサンプル」を参照してください。

C#
//  -------------------------- CreatePackage --------------------------
/// <summary>
///   Creates a package zip file containing specified
///   content and resource files.</summary>
private static void CreatePackage()
{
    // Convert system path and file names to Part URIs. In this example
    // Uri partUriDocument /* /Content/Document.xml */ =
    //     PackUriHelper.CreatePartUri(
    //         new Uri("Content\Document.xml", UriKind.Relative));
    // Uri partUriResource /* /Resources/Image1.jpg */ =
    //     PackUriHelper.CreatePartUri(
    //         new Uri("Resources\Image1.jpg", UriKind.Relative));
    Uri partUriDocument = PackUriHelper.CreatePartUri(
                              new Uri(documentPath, UriKind.Relative));
    Uri partUriResource = PackUriHelper.CreatePartUri(
                              new Uri(resourcePath, UriKind.Relative));

    // Create the Package
    // (If the package file already exists, FileMode.Create will
    //  automatically delete it first before creating a new one.
    //  The 'using' statement insures that 'package' is
    //  closed and disposed when it goes out of scope.)
    using (Package package =
        Package.Open(packagePath, FileMode.Create))
    {
        // Add the Document part to the Package
        PackagePart packagePartDocument =
            package.CreatePart(partUriDocument,
                           System.Net.Mime.MediaTypeNames.Text.Xml);

        // Copy the data to the Document Part
        using (FileStream fileStream = new FileStream(
               documentPath, FileMode.Open, FileAccess.Read))
        {
            CopyStream(fileStream, packagePartDocument.GetStream());
        }// end:using(fileStream) - Close and dispose fileStream.

        // Add a Package Relationship to the Document Part
        package.CreateRelationship(packagePartDocument.Uri,
                                   TargetMode.Internal,
                                   PackageRelationshipType);

        // Add a Resource Part to the Package
        PackagePart packagePartResource =
            package.CreatePart(partUriResource,
                           System.Net.Mime.MediaTypeNames.Image.Jpeg);

        // Copy the data to the Resource Part
        using (FileStream fileStream = new FileStream(
               resourcePath, FileMode.Open, FileAccess.Read))
        {
            CopyStream(fileStream, packagePartResource.GetStream());
        }// end:using(fileStream) - Close and dispose fileStream.

        // Add Relationship from the Document part to the Resource part
        packagePartDocument.CreateRelationship(
                                new Uri(@"../resources/image1.jpg",
                                UriKind.Relative),
                                TargetMode.Internal,
                                ResourceRelationshipType);

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

}// end:CreatePackage()


//  --------------------------- CopyStream ---------------------------
/// <summary>
///   Copies data from a source stream to a target stream.</summary>
/// <param name="source">
///   The source stream to copy from.</param>
/// <param name="target">
///   The destination stream to copy to.</param>
private static void CopyStream(Stream source, Stream target)
{
    const int bufSize = 0x1000;
    byte[] buf = new byte[bufSize];
    int bytesRead = 0;
    while ((bytesRead = source.Read(buf, 0, bufSize)) > 0)
        target.Write(buf, 0, bytesRead);
}// end:CopyStream()
継承階層

System.Object
  System.IO.Packaging.Package
     System.IO.Packaging.ZipPackage
スレッド セーフ

この型の public static (Visual Basicでは共有) メンバはすべて,スレッド セーフです。インスタンス メンバの場合は,スレッド セーフであるとは限りません。
プラットフォーム

Microsoft .NET Framework 3.0 は Windows Vista,Microsoft Windows XP SP2,および Windows Server 2003 SP1 でサポートされています。

バージョン情報

.NET Framework

サポート対象 : 3.0
参照

タグ :


Page view tracker