.NET中zip的压缩和解压
来源:互联网 发布:战舰世界mac 闪退 编辑:程序博客网 时间:2024/05/18 01:05
使用System.IO.Packaging在WindowsBase.dll程序集下,使用时需要添加对WindowsBase的引用。
文件夹压缩
/// <summary> /// Add a folder along with its subfolders to a Package /// </summary> /// <param name="folderName">The folder to add</param> /// <param name="compressedFileName">The package to create</param> /// <param name="overrideExisting">Override exsisitng files</param> /// <returns></returns> static bool PackageFolder(string folderName, string compressedFileName, bool overrideExisting) { if (folderName.EndsWith(@"\")) folderName = folderName.Remove(folderName.Length - 1); bool result = false; if (!Directory.Exists(folderName)) { return result; } if (!overrideExisting && File.Exists(compressedFileName)) { return result; } try { using (Package package = Package.Open(compressedFileName, FileMode.Create)) { var fileList = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories); foreach (string fileName in fileList) { //The path in the package is all of the subfolders after folderName string pathInPackage; pathInPackage = Path.GetDirectoryName(fileName).Replace(folderName, string.Empty) + "/" + Path.GetFileName(fileName); Uri partUriDocument = PackUriHelper.CreatePartUri(new Uri(pathInPackage, UriKind.Relative)); PackagePart packagePartDocument = package.CreatePart(partUriDocument,"", CompressionOption.Maximum); using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { fileStream.CopyTo(packagePartDocument.GetStream()); } } } result = true; } catch (Exception e) { throw new Exception("Error zipping folder " + folderName, e); } return result; }
单文件压缩
/// <summary> /// Compress a file into a ZIP archive as the container store /// </summary> /// <param name="fileName">The file to compress</param> /// <param name="compressedFileName">The archive file</param> /// <param name="overrideExisting">override existing file</param> /// <returns></returns> static bool PackageFile(string fileName, string compressedFileName, bool overrideExisting) { bool result = false; if (!File.Exists(fileName)) { return result; } if (!overrideExisting && File.Exists(compressedFileName)) { return result; } try { Uri partUriDocument = PackUriHelper.CreatePartUri(new Uri(Path.GetFileName(fileName), UriKind.Relative)); using (Package package = Package.Open(compressedFileName, FileMode.OpenOrCreate)) { if (package.PartExists(partUriDocument)) { package.DeletePart(partUriDocument); } PackagePart packagePartDocument = package.CreatePart(partUriDocument, "", CompressionOption.Maximum); using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { fileStream.CopyTo(packagePartDocument.GetStream()); } } result = true; } catch (Exception e) { throw new Exception("Error zipping file " + fileName, e); } return result; }
zip文件解压
/// <summary> /// Extract a container Zip. NOTE: container must be created as Open Packaging Conventions (OPC) specification /// </summary> /// <param name="folderName">The folder to extract the package to</param> /// <param name="compressedFileName">The package file</param> /// <param name="overrideExisting">override existing files</param> /// <returns></returns> static bool UncompressFile(string folderName, string compressedFileName, bool overrideExisting) { bool result = false; try { if (!File.Exists(compressedFileName)) { return result; } DirectoryInfo directoryInfo = new DirectoryInfo(folderName); if (!directoryInfo.Exists) directoryInfo.Create(); using (Package package = Package.Open(compressedFileName, FileMode.Open, FileAccess.Read)) { foreach (PackagePart packagePart in package.GetParts()) { ExtractPart(packagePart, folderName, overrideExisting); } } result = true; } catch (Exception e) { throw new Exception("Error unzipping file " + compressedFileName, e); } return result; } static void ExtractPart(PackagePart packagePart, string targetDirectory, bool overrideExisting) { string stringPart = targetDirectory + HttpUtility.UrlDecode(packagePart.Uri.ToString()).Replace('\\', '/'); if (!Directory.Exists(Path.GetDirectoryName(stringPart))) Directory.CreateDirectory(Path.GetDirectoryName(stringPart)); if (!overrideExisting && File.Exists(stringPart)) return; using (FileStream fileStream = new FileStream(stringPart, FileMode.Create)) { packagePart.GetStream().CopyTo(fileStream); } }使用Package压缩文件会在zip文件自动生成[Content_Type].xml,用来描述zip文件解压支持的文件格式。
<?xml version="1.0" encoding="utf-8" ?> <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> <Default Extension="vsixmanifest" ContentType="text/xml" /> <Default Extension="dll" ContentType="application/octet-stream" /> <Default Extension="png" ContentType="application/octet-stream" /> <Default Extension="txt" ContentType="text/plain" /> <Default Extension="pkgdef" ContentType="text/plain" /> </Types>
0 0
- .NET中zip的压缩和解压
- .NET中zip的压缩和解压
- .NET中zip的压缩和解压——SharpCompress
- .Net 实现 Zip 压缩和解压
- ZIP压缩和解压
- ZIP压缩和解压
- zip压缩和解压
- zip文件的压缩和解压
- java实现zip的压缩和解压
- zip压缩和解压的方法 实测
- 写着玩的zip解压和压缩zip文件
- 压缩zip文件和解压zip格式的文件
- python压缩和解压zip
- java压缩和解压zip
- Java ZIp 压缩和解压
- 文件压缩和解压zip
- 压缩和解压zip文件
- android -解压和压缩zip
- 数组的关系运算
- 安卓定义一根很小的竖线及自定义圆角
- C++中const成员变量的初始化
- 三种方法解决android帮助文档打开慢
- 服务器安全维护
- .NET中zip的压缩和解压
- 二、UNIX网络I/O模型
- 判别式模型与生成式模型
- Google Guava 类库简介
- 数据库表分割技术浅析(水平分割/垂直分割/库表散列)
- 关于iPhone/iPad的iOS系统自动弹出认证窗口问题
- HTML5定稿了,手机App三年内消失?
- 纸上谈兵:c++细节
- UIImagePickerController拍照与摄像