.NET中的包关系(ZipPackage)究竟是什么?我知道什么是包,但我无法理解关系的目的。你能举例说明我什么时候想要使用它们以及它们有什么用处吗?
答案 0 :(得分:1)
来自MSDN(套餐类):
Package是一个抽象类,可用于将对象组织成具有已定义物理格式的单个实体,以实现可移植性和高效访问。
和
PackageRelationship(“relationship”)定义源包或PackagePart与目标对象之间的关联。 PackageRelationship可以是两种类型中的一种,每种类型可以是以下两种形式之一:
* A package-level relationship (created by the Package.CreateRelationship method) relates a Package to either:
o A target part in the package.
o A target resource outside the package.
* A part-level relationship (created by the PackagePart.CreateRelationship method) relates a source PackagePart to either:
o Another target part in the package.
o A target resource outside the package.
因此,在创建Package
时,如果要指示对象与包的另一部分之间存在关系,则应使用PackageRelationship
来指示它与何种关系是
还可以使用ZipPackage
来处理Open Office XML文件 - 在这个用例中,有时可以指示对象之间的关系。请参阅here。
答案 1 :(得分:0)
基本上是将它们连接在一起以便它们被部署,更重要的是同时不部署。
比如说你有一个程序,你有一个它使用的GIF包。然后,您希望在安装程序时可以使用GIF,并且希望在卸载程序时清除它们。
答案 2 :(得分:0)
我认为file formats using OPC都是很好的例子
在c#中,一个带有预览图像的opc容器示例将实现为:
using System.IO.Compression;
using System.IO.Packaging;
using (var package = Package.Open( your_Zip/OPC_File_Path, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
// Add the Preview Image to the OPC container
var imagePart = package.CreatePart( PackUriHelper.CreatePartUri(new Uri("preview.png", UriKind.Relative)), "image/png");
package.CreateRelationship( imagePart.Uri, TargetMode.Internal, OpcConstants.RelationshipTypes.PREVIEWIMAGE, "preview");
using(var imageStream = imagePart.GetStream( FileMode.Open, FileAccess.Write ))
{
imageStream.Write( your_preview_Image_Byte_array, 0, your_preview_Image_Byte_array.Length);
}
}
private byte[] GetPreviewImage(System.IO.Packaging.Package package)
{
if (!package.RelationshipExists("preview"))
{
return null;
}
var previewRel = package.GetRelationship("preview");
var previewUri = PackUriHelper.CreatePartUri(previewRel.TargetUri);
var previewImagePart = package.GetPart(previewUri);
using (var previewImageStream = previewImagePart.GetStream(FileMode.Open, FileAccess.Read))
using (var ms = new MemoryStream())
{
previewImageStream.CopyTo(ms);
return ms.ToArray();
}
}
要将您的png转换为字节数组,您可以执行this
这样做的好处是,之后您可以使用定义的Relationship-Id(=“ preview”)来访问opc容器中的PreviewImage