Package Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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ý obsahuje 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.) Balíček obsahuje také dva PackageRelationship prvky. První, vztah na úrovni balíčku, definuje část dokumentu jako kořenový prvek balíčku. Druhá, "část-úroveň" vztah definuje přidružení mezi částí dokumentu ("zdroj" vztahu na dílčí úrovni) a její použití části obrázku ("cíl" vztahu na úrovni části).
// -------------------------- 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 mohou používat jiné fyzické formáty, jako je dokument XML, databáze nebo webová služba.
Podobně jako systém souborů jsou položky obsažené v objektu Package odkazovány v hierarchickém uspořádání složek a souborů.
I když Package je sám o sobě abstraktní třídou, ZipPackage je odvozená třída 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:
Relace na úrovni balíčku (vytvořená metodou Package.CreateRelationship ) se vztahuje Package k:
- Cílová část v balíčku.
- Cílový prostředek mimo balíček.
Relace na úrovni části (vytvořená metodou PackagePart.CreateRelationship ) spojuje zdroj PackagePart s:
- Další cílová část balíčku.
- Cílový prostředek mimo balíček.
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í digitální podpis, který je součástí Package. Digitální podpis identifikuje původce a ověří, že podepsané části a vztahy obsažené v objektu Package nebyly změněny.
Balíčky také podporují technologii DRM (Správa digitálních práv), která umožňuje, aby prvky obsahu v objektu Package byly zašifrovány pomocí konkrétních přístupových práv udělených autorizovaným uživatelům.
V závislosti na architektuře PackageXpsDocument je typ balíčku určený pro ukládání dokumentů založených na formátu XPS (Open XML Paper Specification).
Rozhraní .NET Framework ve výchozím nastavení používá balíčky k ukládání obsahu, prostředků a relací pro stránky a dokumenty pomocí standardního souboru ZIP. Stejně jako u každého 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 FileAccessinstanci . |
Package(FileAccess, Boolean) |
Inicializuje novou instanci Package třídy, která používá danou FileAccess možnost a možnost streamování. |
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 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 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 úložiště odvozených 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() |
Type Získá z aktuální instance. (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) |
Určuje, jestli je část s daným identifikátorem URI v balíčku. |
RelationshipExists(String) |
Určuje, jestli balíček obsahuje relaci 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. |