Partilhar via


Package Classe

Definição

Representa um contêiner que pode armazenar vários objetos de dados.

public ref class Package abstract : IDisposable
public abstract class Package : IDisposable
type Package = class
    interface IDisposable
Public MustInherit Class Package
Implements IDisposable
Herança
Package
Derivado
Implementações

Exemplos

O exemplo a seguir mostra as etapas básicas para criar um Package. Neste exemplo, um pacote é criado para conter um documento junto com uma imagem gráfica que é exibida como parte do documento. (Isso é semelhante ao caso em que um arquivo HTML tem um <Marca IMG> que faz referência a um arquivo de imagem externo.) Dois PackageRelationship elementos também estão incluídos no pacote. O primeiro, uma relação de "nível de pacote", define a parte do documento como o elemento raiz do pacote. Uma segunda relação de "nível de parte" define a associação entre a parte do documento (a "origem" da relação de nível de parte) e seu uso da parte da imagem (o "destino" da relação de nível de 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

Comentários

Package é uma classe abstrata que pode ser usada para organizar objetos em uma única entidade de um formato físico definido para portabilidade e acesso eficiente.

Um arquivo ZIP é o formato físico primário para o Package. Outras Package implementações podem usar outros formatos físicos, como um documento XML, um banco de dados ou um serviço Web.

Como um sistema de arquivos, os itens contidos em um Package são referenciados em uma organização hierárquica de pastas e arquivos.

Embora Package seja uma classe abstrata, a ZipPackage classe derivada é usada como padrão pelo Open método .

Um PackagePart ("part") é a classe abstrata que representa um objeto armazenado em um Package.

Uma PackageRelationship ("relação") define uma associação entre uma origem Package ou PackagePart um objeto de destino. Um PackageRelationship pode ser um dos dois tipos, cada um dos quais pode ser uma das duas formas:

  • Uma relação no nível do pacote (criada pelo Package.CreateRelationship método ) relaciona um Package a:

    • Uma parte de destino no pacote.
    • Um recurso de destino fora do pacote.
  • Uma relação de nível de parte (criada pelo PackagePart.CreateRelationship método ) relaciona uma fonte PackagePart a:

    • Outra parte de destino no pacote.
    • Um recurso de destino fora do pacote.

A origem Package ou fonte PackagePart da relação é considerada o "proprietário" da relação. Quando o objeto de origem é excluído, todas as relações pertencentes ao objeto de origem também são excluídas. O processo de criação ou exclusão de uma relação não altera fisicamente os objetos de origem ou de destino de forma alguma.

Uma PackageDigitalSignature ("assinatura digital") é uma composição de partes e relações que representam uma assinatura digital incluída com um Package. A assinatura digital identifica o originador e valida que as partes assinadas e as relações contidas no Package não foram modificadas.

Os pacotes também dão suporte ao DRM (Gerenciamento de Direitos Digitais), que permite que elementos de conteúdo em um Package sejam criptografados com direitos de acesso específicos concedidos a usuários autorizados.

Com base na Package arquitetura, um XpsDocument é um tipo de pacote projetado para armazenar documentos com base na XPS (especificação de papel XML aberto).

.NET Framework usa pacotes para armazenar conteúdo, recursos e relações para páginas e documentos usando um arquivo ZIP padrão por padrão. Assim como acontece com qualquer arquivo ZIP, seu aplicativo pode usar as System.IO.Packaging classes para armazenar e, opcionalmente, proteger qualquer tipo ou número de arquivos de dados em um único contêiner eficiente de acesso.

Para obter mais informações, consulte a especificação OPC (Open Packaging Conventions) disponível para download em https://www.ecma-international.org/publications-and-standards/standards/ecma-376/.

Construtores

Package(FileAccess)

Inicializa uma nova instância da classe Package que usa um determinado FileAccess.

Package(FileAccess, Boolean)

Inicializa uma nova instância da classe Package que usa um determinado FileAccess e opção de streaming.

Propriedades

FileOpenAccess

Obtém a configuração de acesso ao arquivo para o pacote.

PackageProperties

Obtém as propriedades principais do pacote.

Métodos

Close()

Salva e fecha o pacote e todos os fluxos de parte subjacente.

CreatePart(Uri, String)

Cria uma nova parte descompactada com um URI e tipo de conteúdo específicos.

CreatePart(Uri, String, CompressionOption)

Cria uma nova parte com um URI, um tipo de conteúdo e uma opção de compactação específicos.

CreatePartCore(Uri, String, CompressionOption)

Quando substituído em uma classe derivada, cria uma nova parte no pacote.

CreateRelationship(Uri, TargetMode, String)

Cria uma relação de nível de pacote para uma parte com um determinado URI, modo de destino e tipo de relacionamento.

CreateRelationship(Uri, TargetMode, String, String)

Cria uma relação de nível de pacote com uma parte com um determinado URI, modo de destino, tipo de relação e identificador (ID).

DeletePart(Uri)

Exclui uma parte com um determinado URI do pacote.

DeletePartCore(Uri)

Quando substituído em uma classe derivada, exclui uma parte com um determinado URI.

DeleteRelationship(String)

Exclui a relação do nível de pacote.

Dispose(Boolean)

Libera e salva o conteúdo de todas as partes e relações, fecha o pacote e libera todos os recursos.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Flush()

Salva o conteúdo de todas as partes e relações que estão contidas no pacote.

FlushCore()

Quando substituído em uma classe derivada, salva o conteúdo de todas as partes e relações para o repositório de classe derivada.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetPart(Uri)

Retorna a parte com um determinado URI.

GetPartCore(Uri)

Quando substituído em uma classe derivada, retorna a parte endereçada por um determinado URI.

GetParts()

Retorna uma coleção de todas as partes no pacote.

GetPartsCore()

Quando substituído em uma classe derivada, retorna uma matriz de todas as partes no pacote.

GetRelationship(String)

Retorna a relação de nível de pacote com o identificador fornecido.

GetRelationships()

Retorna uma coleção de todas as relações de nível de pacote.

GetRelationshipsByType(String)

Retorna uma coleção de todas as relações de nível de pacote que correspondem a um determinado RelationshipType.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
Open(Stream)

Abre um pacote em um determinado fluxo de E/S.

Open(Stream, FileMode)

Abre um pacote com um fluxo de E/S e um modo de arquivo.

Open(Stream, FileMode, FileAccess)

Abre um pacote com um fluxo de E/S, um modo de arquivo e uma configuração de acesso a arquivos especificados.

Open(String)

Abre um pacote em um determinado caminho e nome de arquivo.

Open(String, FileMode)

Abre um pacote em um determinado caminho usando um dado modo de arquivo.

Open(String, FileMode, FileAccess)

Abre um pacote em um determinado caminho usando um dado modo de arquivo e uma configuração de acesso ao arquivo.

Open(String, FileMode, FileAccess, FileShare)

Abre um pacote em um determinado caminho usando um dado modo de arquivo, acesso a arquivos e configurações de compartilhamento de arquivos.

PartExists(Uri)

Indica se uma parte com um determinado URI está no pacote.

RelationshipExists(String)

Indica se uma relação de nível de pacote com uma determinada ID está contida no pacote.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

IDisposable.Dispose()

Esse membro dá suporte à infraestrutura de Windows Presentation Foundation (WPF) e não se destina ao uso do aplicativo. Use o método Dispose(Boolean) fortemente tipado em vez disso.

Aplica-se a

Confira também