调用很简单,参照下面
using (var tempContainer = ZipContainer.Open("存放 zip 文件的路径,要带扩展名哦",
FileMode.Create))
{
tempContainer.Zip("有三个重载方法,看着调用吧", "被压缩的文件/文件夹存放的位置可以是
String.Empty", true);
}
注意:
1) 需要引用 WindowsBase.dll,这是在.net framework3.0 才出现的,换句话讲,这个压缩方式需要注意 framework 版本
2) 研究半天发现正常情况下是不支持中文文件名的,比如代码中之所以要用 PackUriHelper,就是为了处理中文文件名(毕竟 Package
设计的初衷是为了打包 OpenXml 所以在 Uri 的 XmlSchema 中设置了正则约束)。目前还没找到可以绕开 Uri 验证的特殊方法(好吧,
这真是废话。)
3) 看命名就知道,本来是想提供一套完整的类库的,但是由于不支持中文(压缩还好,只是把中文名转义了,而解压缩时如果压缩
包中有中文文件名根本就识别不了,以至于无法解压缩。
以前从其它网站下载东西发现里面压缩的文件名是带百分号长长的一串
儿,估计就是用这种方式提供的压缩包
),所以就放弃了。当然有一些经验是可以和大家分享的。
解压缩思路分享
用 Package Open zip 文件时,调试一下,然后看对象结构,骚年们懂了么?通过反射获取 ZipFileInfoDic&onary(因为是非 public 方
法,所以目前只能用反射),然后这里面的东西就是 Package 中的 Uri。多说一句:如果压缩包中含有非英文字符,那么恭喜你,看到
的是一堆???(就是问好,想转义都没办法)。我也是被逼的没法,一个个瞎点点出来这个的。所以,好奇心有时候也是优点。
下图的 Dispose 方法就是为了删除默认生成的[Document_Types].xml。(有它也解决不了中文文件名的问题)
多一句嘴,你们看到的压缩包就用这个代码生成的。