Package Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет контейнер, который может хранить несколько объектов данных.
public ref class Package abstract : IDisposable
public abstract class Package : IDisposable
type Package = class
interface IDisposable
Public MustInherit Class Package
Implements IDisposable
- Наследование
-
Package
- Производный
- Реализации
Примеры
В следующем примере показаны основные шаги по созданию Package. В этом примере пакет создается для хранения документа вместе с графическим изображением, отображаемым в рамках документа. (Это аналогично тому, в каком HTML-файле есть < HTML-файлТег IMG> , ссылающийся на файл внешнего образа.) Два PackageRelationship элемента также включены в пакет. Во-первых, связь "уровень пакета" определяет часть документа в качестве корневого элемента пакета. Во-вторых, связь на уровне части определяет связь между частью документа (источником отношения уровня части) и его использованием части изображения (целевой объект связи уровня части).
// -------------------------- 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
Комментарии
Package — абстрактный класс, который можно использовать для упорядочивания объектов в одну сущность определенного физического формата для переносимости и эффективного доступа.
ZIP-файл — это основной физический формат для Package. Другие Package реализации могут использовать другие физические форматы, такие как XML-документ, база данных или веб-служба.
Как и файловая система, элементы, содержащиеся в объекте Package , ссылаются в иерархической организации папок и файлов.
Хотя Package сам по себе является абстрактным классом, ZipPackage производный класс используется в качестве метода по умолчанию Open .
A PackagePart ("part") — это абстрактный класс, представляющий объект, хранящийся в объекте Package.
A PackageRelationship ("связь") определяет связь между источником Package или PackagePart целевым объектом. Может PackageRelationship быть один из двух типов, каждый из которых может быть одним из двух форм:
Отношение уровня пакета (созданное методом Package.CreateRelationship ) относится к одному из следующих элементов Package :
- Целевая часть пакета.
- Целевой ресурс за пределами пакета.
Связь на уровне части (созданная методом PackagePart.CreateRelationship ) связывает источник PackagePart с следующим:
- Другая целевая часть пакета.
- Целевой ресурс за пределами пакета.
Источник или источник PackagePackagePart связи считается "владельцем" отношения. При удалении исходного объекта все связи, принадлежащие исходному объекту, также удаляются. Процесс создания или удаления связи физически не изменяет исходные или целевые объекты каким-либо образом.
A PackageDigitalSignature ("цифровая подпись") — это состав частей и связей, представляющих цифровую подпись, включенную в состав Package. Цифровая подпись определяет источник и проверяет, что подписанные части и связи, содержащиеся в ней Package , не были изменены.
Пакеты также поддерживают digital Rights Management (DRM), что позволяет шифровать элементы содержимого Package в зашифрованном виде с определенными правами доступа, предоставленными авторизованным пользователям.
Package На основе архитектуры используется тип пакета, XpsDocument предназначенный для хранения документов на основе открытой спецификации XML Paper (XPS).
.NET Framework использует пакеты для хранения содержимого, ресурсов и связей для страниц и документов с помощью стандартного ZIP-файла по умолчанию. Как и в любом ZIP-файле, приложение может использовать System.IO.Packaging классы для хранения и при необходимости защиты любого типа или количества файлов данных в одном контейнере эффективного доступа.
Дополнительные сведения см. в спецификации Open Packaging Conventions (OPC), доступной для скачивания по адресу https://www.ecma-international.org/publications-and-standards/standards/ecma-376/.
Конструкторы
| Имя | Описание |
|---|---|
| Package(FileAccess, Boolean) |
Инициализирует новый экземпляр Package класса, использующего заданный FileAccess и потоковый параметр. |
| Package(FileAccess) |
Инициализирует новый экземпляр Package класса, использующего заданный FileAccess. |
Свойства
| Имя | Описание |
|---|---|
| FileOpenAccess |
Возвращает параметр доступа к файлам для пакета. |
| PackageProperties |
Возвращает основные свойства пакета. |
Методы
| Имя | Описание |
|---|---|
| Close() |
Сохраняет и закрывает пакет, а также все потоки базовых частей. |
| CreatePart(Uri, String, CompressionOption) |
Создает новую часть с заданным URI, типом контента и параметром сжатия. |
| CreatePart(Uri, String) |
Создает новую несжатую часть с заданным универсальным кодом ресурса (URI) и типом контента. |
| CreatePartCore(Uri, String, CompressionOption) |
При переопределении в производном классе создает новую часть пакета. |
| CreateRelationship(Uri, TargetMode, String, String) |
Создает связь уровня пакета с частью с заданным универсальным кодом ресурса (URI), целевым режимом, типом связи и идентификатором (идентификатором). |
| CreateRelationship(Uri, TargetMode, String) |
Создает связь уровня пакета с частью с заданным универсальным кодом ресурса (URI), целевым режимом и типом связи. |
| DeletePart(Uri) |
Удаляет часть с заданным URI из пакета. |
| DeletePartCore(Uri) |
При переопределении в производном классе удаляет часть с заданным URI. |
| DeleteRelationship(String) |
Удаляет связь уровня пакета. |
| Dispose(Boolean) |
Очищает и сохраняет содержимое всех частей и связей, закрывает пакет и освобождает все ресурсы. |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| Flush() |
Сохраняет содержимое всех частей и связей, содержащихся в пакете. |
| FlushCore() |
При переопределении в производном классе сохраняет содержимое всех частей и связей в производном хранилище классов. |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetPart(Uri) |
Возвращает часть с заданным универсальным кодом ресурса (URI). |
| GetPartCore(Uri) |
При переопределении в производном классе возвращает часть, адресованную заданному URI. |
| GetParts() |
Возвращает коллекцию всех частей пакета. |
| GetPartsCore() |
При переопределении в производном классе возвращает массив всех частей пакета. |
| GetRelationship(String) |
Возвращает связь уровня пакета с заданным идентификатором. |
| GetRelationships() |
Возвращает коллекцию всех связей уровня пакета. |
| GetRelationshipsByType(String) |
Возвращает коллекцию всех связей уровня пакета, соответствующих заданному.RelationshipType |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| Open(Stream, FileMode, FileAccess) |
Открывает пакет с заданным потоком ввода-вывода, режимом файлов и параметром доступа к файлам. |
| Open(Stream, FileMode) |
Открывает пакет с заданным потоком ввода-вывода и режимом файлов. |
| Open(Stream) |
Открывает пакет в заданном потоке ввода-вывода. |
| Open(String, FileMode, FileAccess, FileShare) |
Открывает пакет по заданному пути с помощью заданного режима файлов, доступа к файлам и общей папки. |
| Open(String, FileMode, FileAccess) |
Открывает пакет по заданному пути с помощью заданного режима файлов и параметра доступа к файлам. |
| Open(String, FileMode) |
Открывает пакет по заданному пути с помощью заданного режима файла. |
| Open(String) |
Открывает пакет по указанному пути и имени файла. |
| PartExists(Uri) |
Указывает, находится ли часть с заданным URI в пакете. |
| RelationshipExists(String) |
Указывает, содержится ли в пакете связь уровня пакета с заданным идентификатором. |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| IDisposable.Dispose() |
Этот член поддерживает инфраструктуру Windows Presentation Foundation (WPF) и не предназначен для использования приложения. Вместо этого используйте метод, безопасный Dispose(Boolean) для типов. |