Package Classe

Definizione

Rappresenta un contenitore che può archiviare più oggetti dati.

public ref class Package abstract : IDisposable
public abstract class Package : IDisposable
type Package = class
    interface IDisposable
Public MustInherit Class Package
Implements IDisposable
Ereditarietà
Package
Derivato
Implementazioni

Esempio

Nell'esempio seguente vengono illustrati i passaggi di base per la creazione di un Packageoggetto . In questo esempio viene creato un pacchetto per contenere un documento insieme a un'immagine grafica visualizzata come parte del documento. Questo è simile al caso in cui un file HTML ha un <Tag IMG> che fa riferimento a un file immagine esterno. Due PackageRelationship elementi sono inclusi anche nel pacchetto. La prima relazione "a livello di pacchetto" definisce la parte del documento come elemento radice del pacchetto. Una seconda relazione "a livello di parte" definisce l'associazione tra la parte del documento (l'origine della relazione a livello di parte) e l'uso della parte immagine (la "destinazione" della relazione a livello di parte).

//  -------------------------- 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

Commenti

Package è una classe astratta che può essere usata per organizzare gli oggetti in una singola entità di un formato fisico definito per la portabilità e l'accesso efficiente.

Un file ZIP è il formato fisico principale per l'oggetto Package. Altre Package implementazioni possono usare altri formati fisici, ad esempio un documento XML, un database o un servizio Web.

Come un file system, gli elementi contenuti in un oggetto vengono a cui si fa riferimento in un'organizzazione Package gerarchica di cartelle e file.

Anche se Package si tratta di una classe astratta, la ZipPackage classe derivata viene usata come predefinita dal Open metodo .

Un PackagePart oggetto ("part") è la classe astratta che rappresenta un oggetto archiviato in un Packageoggetto .

Un PackageRelationship oggetto ("relazione") definisce un'associazione tra un'origine Package o PackagePart un oggetto di destinazione. Un PackageRelationship oggetto può essere uno di due tipi, ognuno dei quali può essere uno di due forme:

  • Una relazione a livello di pacchetto (creata dal Package.CreateRelationship metodo) si riferisce Package a una delle due:

    • Parte di destinazione nel pacchetto.
    • Risorsa di destinazione all'esterno del pacchetto.
  • Una relazione a livello di parte (creata dal metodo) è correlata a un'origine PackagePart.CreateRelationshipPackagePart :

    • Un'altra parte di destinazione nel pacchetto.
    • Risorsa di destinazione all'esterno del pacchetto.

L'origine o l'origine PackagePackagePart della relazione viene considerata il "proprietario" della relazione. Quando l'oggetto di origine viene eliminato, vengono eliminate anche tutte le relazioni di proprietà dell'oggetto di origine. Il processo di creazione o eliminazione di una relazione non cambia fisicamente gli oggetti di origine o di destinazione in alcun modo.

Un PackageDigitalSignature oggetto ("firma digitale") è una composizione di parti e relazioni che rappresentano una firma digitale inclusa in un Packageoggetto . La firma digitale identifica l'origine e convalida che le parti e le relazioni firmate contenute nell'oggetto Package non siano state modificate.

I pacchetti supportano anche Digital Rights Management (DRM) che consente di crittografare gli elementi del contenuto in un Package oggetto con diritti di accesso specifici concessi agli utenti autorizzati.

In base all'architettura, un XpsDocument oggetto è un tipo di pacchetto progettato per l'archiviazione Package di documenti in base alla specifica di carta XML aperta (XPS).

.NET Framework usa pacchetti per archiviare contenuto, risorse e relazioni per pagine e documenti usando un file ZIP standard per impostazione predefinita. Come per qualsiasi file ZIP, l'applicazione può usare le System.IO.Packaging classi per archiviare e, facoltativamente, proteggere qualsiasi tipo o numero di file di dati in un singolo contenitore efficiente da accedere.

Per altre informazioni, vedere la specifica Open Packaging Conventions (OPC) disponibile per il download in https://www.ecma-international.org/publications-and-standards/standards/ecma-376/.

Costruttori

Package(FileAccess)

Inizializza una nuova istanza della classe Package tramite FileAccess specificato.

Package(FileAccess, Boolean)

Inizializza un'istanza nuova della classe Package che utilizza FileAccess specificato e un'opzione di flusso.

Proprietà

FileOpenAccess

Ottiene l'impostazione di accesso ai file per il pacchetto.

PackageProperties

Ottiene le proprietà principali del pacchetto.

Metodi

Close()

Salva e chiude il pacchetto più tutti i flussi della parte sottostanti.

CreatePart(Uri, String)

Crea una parte non compressa nuova con un URI specificato e un tipo di contenuto.

CreatePart(Uri, String, CompressionOption)

Crea una parte nuova con un URI specificato, un tipo di contenuto e un'opzione di compressione.

CreatePartCore(Uri, String, CompressionOption)

Quando è sottoposto a override in una classe derivata, crea una parte nuova nel pacchetto.

CreateRelationship(Uri, TargetMode, String)

Crea una relazione a livello di pacchetto con una parte con un URI specificato, un modalità di destinazione e un tipo di relazione.

CreateRelationship(Uri, TargetMode, String, String)

Crea una relazione a livello di pacchetto a una parte con un determinato URI, modalità di destinazione, tipo di relazione e identificatore (ID).

DeletePart(Uri)

Elimina una parte con un URI specificato dal pacchetto.

DeletePartCore(Uri)

Quando è sottoposto a override in una classe derivata, elimina una parte con un URI specificato.

DeleteRelationship(String)

Elimina una relazione a livello di pacchetto.

Dispose(Boolean)

Svuota e salva il contenuto di tutte le parti e le relazioni, chiude il pacchetto e rilascia tutte le risorse.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
Flush()

Salva il contenuto di tutte le parti e le relazioni contenute nel pacchetto.

FlushCore()

Quando è sottoposto a override in una classe derivata, salva il contenuto di tutte le parti e le relazioni nell'archivio della classe derivata.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetPart(Uri)

Restituisce la parte con un URI specificato.

GetPartCore(Uri)

Quando è sottoposto a override in una classe derivata, restituisce la parte alla quale fa riferimento un URI specificato.

GetParts()

Restituisce un insieme di tutte le parti nel pacchetto.

GetPartsCore()

Quando è sottoposto a override in una classe derivata, restituisce una matrice di tutte le parti nel pacchetto.

GetRelationship(String)

Restituisce la relazione a livello di pacchetto con un identificatore specificato.

GetRelationships()

Restituisce un insieme di tutte le relazioni a livello di pacchetto.

GetRelationshipsByType(String)

Restituisce un insieme di tutte le relazioni a livello di pacchetto che corrispondono a RelationshipType specificato.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
Open(Stream)

Apre un pacchetto su un flusso di IO specificato.

Open(Stream, FileMode)

Apre un pacchetto con un flusso di IO e modalità file specificati.

Open(Stream, FileMode, FileAccess)

Apre un pacchetto con un'impostazione specificata di flusso di IO, modalità file e accesso ai file.

Open(String)

Apre un pacchetto in un percorso e con nome file specificati.

Open(String, FileMode)

Apre un pacchetto in un percorso specificato utilizzando una modalità di file specificata.

Open(String, FileMode, FileAccess)

Apre un pacchetto in un percorso specificato utilizzando un'impostazione specificato di modalità file e accesso ai file.

Open(String, FileMode, FileAccess, FileShare)

Apre un pacchetto in un percorso specificato utilizzando un'impostazione specificata di modalità file, accesso ai file e condivisione file.

PartExists(Uri)

Indica se una parte con un URI specificato è nel pacchetto.

RelationshipExists(String)

Indica se una relazione a livello di pacchetto con un ID specificato è contenuta nel pacchetto.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

IDisposable.Dispose()

Questo membro supporta l'infrastruttura Windows Presentation Foundation (WPF) e non è destinata all'uso dell'applicazione. Usare invece il metodo Dispose(Boolean) indipendente dai tipi.

Si applica a

Vedi anche