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. (Je to podobné jako v případě, že soubor HTML obsahuje <Značka IMG> , která odkazuje na externí soubor obrázku.) Součástí balíčku jsou také dva PackageRelationship prvky. První, vztah na úrovni balíčku, definuje část dokumentu jako kořenový prvek balíčku. Druhý vztah "dílčí úrovně" definuje přidružení mezi částí dokumentu ("zdroj" vztahu na úrovni části) a jejím použitím části obrázku ("cíl" vztahu na úrovni části). Kompletní ukázku najdete v tématu Vytvoření 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, kterou 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 pro Package. Jiné Package implementace můžou používat jiné fyzické formáty, jako je dokument XML, databáze nebo webová služba.

Podobně jako u systému souborů se na položky obsažené v objektu Package odkazuje v hierarchické organizaci složek a souborů.

I když Package je sám o sobě abstraktní třída, ZipPackage odvozená třída je použita jako výchozí metodou Open .

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

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

Zdroj nebo zdroj PackagePackagePart relace se považují za vlastníka relace. Při odstranění zdrojového objektu se odstraní také všechny relace vlastněné zdrojovým objektem. Proces vytvoření nebo odstranění relace nijak fyzicky nemění zdrojové ani cílové objekty.

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

Balíčky také podporují technologii DRM (Digital Rights Management), která umožňuje zašifrovat prvky obsahu v objektu Package se specifickými přístupovými právy udělenými oprávněným uživatelům.

V závislosti na architektuře PackageXpsDocument je typ balíčku navržený pro ukládání dokumentů na základě formátu XPS (Open XML Paper Specification).

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

Další informace najdete ve specifikaci OPC (Open Packaging Conventions), která je 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 možnost a streamování.

Vlastnosti

FileOpenAccess

Získá nastavení přístupu k souborům pro balíček.

PackageProperties

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

Metody

Close()

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

CreatePart(Uri, String)

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

CreatePart(Uri, String, CompressionOption)

Vytvoří novou část s daným identifikátorem URI, typem obsahu a možností komprese.

CreatePartCore(Uri, String, CompressionOption)

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

CreateRelationship(Uri, TargetMode, String)

Vytvoří relaci na úrovni balíčku s částí 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í hashovací funkce.

(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í v balíčku.

GetPartsCore()

Při přepsání v odvozené třídě vrátí pole všech částí v 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 RelationshipTypeobjektu .

GetType()

Získá aktuální Type instanci.

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

Vytvoří mělkou kopii aktuálního Objectsouboru .

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

Otevře balíček pro daný vstupně-výstupní datový proud.

Open(Stream, FileMode)

Otevře balíček s daným vstupně-výstupním streamem a režimem souboru.

Open(Stream, FileMode, FileAccess)

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

Open(String)

Otevře balíček s danou cestou a názvem souboru.

Open(String, FileMode)

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

Open(String, FileMode, FileAccess)

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

Open(String, FileMode, FileAccess, FileShare)

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

PartExists(Uri)

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

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í aplikací. Místo toho použijte typově bezpečnou Dispose(Boolean) metodu.

Platí pro

Viz také