Package Třída

Definice

Představuje kontejner, který může ukládat více datových objektů.

public ref class Package abstract : IDisposable
public abstract class Package : IDisposable
type Package = class
    interface IDisposable
Public MustInherit Class Package
Implements IDisposable
Dědičnost
Package
Odvozené
Implementuje

Příklady

Následující příklad ukazuje základní kroky pro vytvoření Package. V tomto příkladu se vytvoří balíček, který bude obsahovat dokument společně s grafickým obrázkem, který se zobrazí jako součást dokumentu. (To se podobá případu, ve kterém má soubor <IMG> HTML značku, která odkazuje na externí soubor obrázku.) Součástí balíčku jsou také dva PackageRelationship prvky. První relace na úrovni balíčku definuje část dokumentu jako kořenový prvek balíčku. Druhý vztah "na úrovni části" definuje přidružení mezi částí dokumentu ("zdroj" relace na úrovni části) a jeho použití části obrázku ("cíl" relace na úrovni části). Kompletní ukázku najdete v tématu Zápis ukázky balíčku.

//  -------------------------- 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()
'  -------------------------- CreatePackage --------------------------
''' <summary>
'''   Creates a package zip file containing specified
'''   content and resource files.</summary>
Private Shared Sub CreatePackage()
    ' Convert system path and file names to Part URIs. In this example
    ' Dim partUriDocument as Uri /* /Content/Document.xml */ =
    '     PackUriHelper.CreatePartUri(
    '         New Uri("Content\Document.xml", UriKind.Relative))
    ' Dim partUriResource as Uri /* /Resources/Image1.jpg */ =
    '     PackUriHelper.CreatePartUri(
    '         New Uri("Resources\Image1.jpg", UriKind.Relative))
    Dim partUriDocument As Uri = PackUriHelper.CreatePartUri(New Uri(documentPath, UriKind.Relative))
    Dim partUriResource As Uri = 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 As Package = Package.Open(packagePath, FileMode.Create)
        ' Add the Document part to the Package
        Dim packagePartDocument As PackagePart = package.CreatePart(partUriDocument, System.Net.Mime.MediaTypeNames.Text.Xml)

        ' Copy the data to the Document Part
        Using fileStream As New FileStream(documentPath, FileMode.Open, FileAccess.Read)
            CopyStream(fileStream, packagePartDocument.GetStream())
        End Using ' 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
        Dim packagePartResource As PackagePart = package.CreatePart(partUriResource, System.Net.Mime.MediaTypeNames.Image.Jpeg)

        ' Copy the data to the Resource Part
        Using fileStream As New FileStream(resourcePath, FileMode.Open, FileAccess.Read)
            CopyStream(fileStream, packagePartResource.GetStream())
        End Using ' 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 ' end:using (Package package) - Close and dispose package.

End Sub


'  --------------------------- 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 Shared Sub CopyStream(ByVal source As Stream, ByVal target As Stream)
    Const bufSize As Integer = &H1000
    Dim buf(bufSize - 1) As Byte
    Dim bytesRead As Integer = 0
    bytesRead = source.Read(buf, 0, bufSize)
    Do While bytesRead > 0
        target.Write(buf, 0, bytesRead)
        bytesRead = source.Read(buf, 0, bufSize)
    Loop
End Sub

Poznámky

Package je abstraktní třída, která lze použít k uspořádání objektů do jedné entity definovaného fyzického formátu pro přenositelnost a efektivní přístup.

Soubor ZIP je primární fyzický formát souboru Package. Jiné Package implementace můžou používat jiné fyzické formáty, jako je dokument XML, databáze nebo webová služba.

Podobně jako systém souborů se na položky obsažené v systému Package souborů odkazují v hierarchické organizaci složek a souborů.

I když Package samotný je abstraktní třída, ZipPackage odvozená třída se používá jako výchozí metodou Open .

A PackagePart ("část") je abstraktní třída, která představuje objekt, který je uložen v Package.

A PackageRelationship ("relace") definuje přidružení mezi zdrojem Package nebo PackagePart cílovým objektem. A PackageRelationship může být jedním ze dvou typů, z nichž každý může být jeden ze dvou formulářů:

  • Relace na úrovni balíčku (vytvořená metodou Package.CreateRelationship ) souvisí Package s některou z těchto vztahů:

    • Cílová část balíčku.

    • Cílový prostředek mimo balíček.

  • Relace na úrovni části (vytvořená PackagePart.CreateRelationship metodou) souvisí se zdrojem PackagePart :

    • Další cílová část balíčku.

    • Cílový prostředek mimo balíček.

Zdroj nebo zdroj PackagePart relace Package se považuje za "vlastníka" relace. Po odstranění zdrojového objektu se odstraní také všechny relace vlastněné zdrojovým objektem. Proces vytváření nebo odstraňování relace fyzicky nemění zdrojové nebo cílové objekty žádným způsobem.

A PackageDigitalSignature ("digitální podpis") je složení částí a vztahů představujících digitální podpis, který je součástí Package. Digitální podpis identifikuje původce a ověří, že podepsané části a vztahy obsažené v Package něm nebyly změněny.

Balíčky také podporují technologii DRM (Digital Rights Management), která umožňuje zašifrování prvků obsahu s Package určitými přístupovými právy udělenými autorizovaným uživatelům.

Na Package základě architektury XpsDocument je typ balíčku určený pro ukládání dokumentů na základě open XML Paper Specification (XPS).

.NET Framework používá balíčky k ukládání obsahu, prostředků a relací pro stránky a dokumenty ve výchozím nastavení pomocí standardního souboru ZIP. Stejně jako u jakéhokoli souboru ZIP může vaše aplikace pomocí System.IO.Packaging tříd ukládat a volitelně chránit libovolný typ nebo počet datových souborů v jednom kontejneru pro efektivní přístup.

Další informace najdete v specifikaci OPC (Open Packaging Conventions) k dispozici ke stažení na adrese https://www.ecma-international.org/publications-and-standards/standards/ecma-376/.

Konstruktory

Package(FileAccess)

Inicializuje novou instanci Package třídy, která používá danou FileAccess.

Package(FileAccess, Boolean)

Inicializuje novou instanci Package třídy, která používá danou FileAccess a streamovací možnost.

Vlastnosti

FileOpenAccess

Získá nastavení přístupu k souboru pro balíček.

PackageProperties

Získá základní vlastnosti balíčku.

Metody

Close()

Uloží a zavře balíček a všechny podkladové datové proudy částí.

CreatePart(Uri, String)

Vytvoří novou nekomprimovanou část s daným identifikátorem URI a typem obsahu.

CreatePart(Uri, String, CompressionOption)

Vytvoří novou část s danou možností identifikátoru URI, typu obsahu a komprese.

CreatePartCore(Uri, String, CompressionOption)

Při přepsání v odvozené třídě vytvoří novou část balíčku.

CreateRelationship(Uri, TargetMode, String)

Vytvoří relaci na úrovni balíčku k části s daným identifikátorem URI, cílovým režimem a typem relace.

CreateRelationship(Uri, TargetMode, String, String)

Vytvoří relaci na úrovni balíčku k části s daným identifikátorem URI, cílovým režimem, typem relace a identifikátorem (ID).

DeletePart(Uri)

Odstraní část s daným identifikátorem URI z balíčku.

DeletePartCore(Uri)

Při přepsání v odvozené třídě odstraní část s daným identifikátorem URI.

DeleteRelationship(String)

Odstraní relaci na úrovni balíčku.

Dispose(Boolean)

Vyprázdní a uloží obsah všech částí a relací, zavře balíček a uvolní všechny prostředky.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
Flush()

Uloží obsah všech částí a relací obsažených v balíčku.

FlushCore()

Při přepsání v odvozené třídě uloží obsah všech částí a relací do odvozeného úložiště tříd.

GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetPart(Uri)

Vrátí část s daným identifikátorem URI.

GetPartCore(Uri)

Při přepsání v odvozené třídě vrátí část adresovanou daným identifikátorem URI.

GetParts()

Vrátí kolekci všech částí balíčku.

GetPartsCore()

Při přepsání v odvozené třídě vrátí pole všech částí balíčku.

GetRelationship(String)

Vrátí relaci na úrovni balíčku s daným identifikátorem.

GetRelationships()

Vrátí kolekci všech relací na úrovni balíčku.

GetRelationshipsByType(String)

Vrátí kolekci všech relací na úrovni balíčku, které odpovídají danému RelationshipType.

GetType()

Type Získá aktuální instanci.

(Zděděno od Object)
MemberwiseClone()

Vytvoří použádnou kopii aktuálního souboru Object.

(Zděděno od Object)
Open(Stream)

Otevře balíček na daném vstupně-výstupním datovém proudu.

Open(Stream, FileMode)

Otevře balíček s daným vstupně-výstupním datovým proudem a režimem souborů.

Open(Stream, FileMode, FileAccess)

Otevře balíček s daným vstupně-výstupním datovým proudem, režimem souborů a nastavením přístupu k souborům.

Open(String)

Otevře balíček v dané cestě a názvu souboru.

Open(String, FileMode)

Otevře balíček na dané cestě pomocí daného režimu souboru.

Open(String, FileMode, FileAccess)

Otevře balíček na dané cestě pomocí daného režimu souboru a nastavení přístupu k souboru.

Open(String, FileMode, FileAccess, FileShare)

Otevře balíček na dané cestě pomocí daného režimu souborů, přístupu k souborům a nastavení sdílené složky.

PartExists(Uri)

Určuje, jestli je část s daným identifikátorem URI v balíčku.

RelationshipExists(String)

Určuje, jestli je v balíčku obsažen vztah na úrovni balíčku s daným ID.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Explicitní implementace rozhraní

IDisposable.Dispose()

Tento člen podporuje infrastrukturu Windows Presentation Foundation (WPF) a není určená pro použití aplikace. Místo toho použijte metodu bezpečnou Dispose(Boolean) pro typ.

Platí pro

Viz také