c# 动态操作 zip\rar 文件,压缩解压组件使用
2015-12-07 16:00
1011 查看
c# 动态操作 zip\rar 文件,压缩解压组件使用
c# 动态操作一个压缩文件,可以动态完成以下操作
1.创建一个 zip
2.向 zip 中附加文件
3.更新 zip 中指定文件
4.删除 zip 中指定文件
5.解压缩 zip
6.在zip中提取一个文件
c# 动态操作一个压缩文件,可以动态完成以下操作
1.创建一个 zip
2.向 zip 中附加文件
3.更新 zip 中指定文件
4.删除 zip 中指定文件
5.解压缩 zip
6.在zip中提取一个文件
using System; using System.IO; using Ionic.Zip; using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Linq; namespace TestIonicZip { [TestClass] public class TestZip { /// <summary> /// 创建一个 zip /// </summary> [TestMethod] public void CreateZip() { var baseDir = Path.GetFullPath(@"..\..\zips"); var zipPath = Path.Combine(baseDir, string.Format("{0}.zip", DateTime.Now.ToString("yyyyMMddHHmmss"))); var imgDir = Path.GetFullPath(@"..\..\img"); var files = Directory.GetFiles(imgDir); using (ZipFile zip = new ZipFile()) { String[] filenames = System.IO.Directory.GetFiles(imgDir); foreach (String filename in filenames) { ZipEntry e = zip.AddFile(filename,""); e.Comment = "Added by Cheeso's CreateZip utility."; } zip.Comment = String.Format("This zip archive was created by the CreateZip example application on machine '{0}'", System.Net.Dns.GetHostName()); zip.Save(zipPath); } } /// <summary> /// 向 zip 中附加文件 /// </summary> [TestMethod] public void AppendToZip() { var baseDir = Path.GetFullPath(@"..\..\zips"); var zipPath = Path.Combine(baseDir, string.Format("{0}.zip", DateTime.Now.ToString("yyyyMMddHHmmss"))); var zipFix = Path.Combine(baseDir,"20151202194926.zip"); var imgDir = Path.GetFullPath(@"..\..\img"); var files = Directory.GetFiles(imgDir); using (ZipFile zip = new ZipFile(zipFix)) { String[] filenames = System.IO.Directory.GetFiles(imgDir); foreach (String filename in filenames) { ZipEntry e = zip.AddFile(filename, "aa"); e.Comment = "Added by Cheeso's CreateZip utility."; } zip.Comment = String.Format("This zip archive was created by the CreateZip example application on machine '{0}'", System.Net.Dns.GetHostName()); zip.Save(); } } /// <summary> /// 更新 zip 中指定文件 /// </summary> [TestMethod] public void UpdateZip() { var baseDir = Path.GetFullPath(@"..\..\zips"); var zipPath = Path.Combine(baseDir, string.Format("{0}.zip", DateTime.Now.ToString("yyyyMMddHHmmss"))); var zipFix = Path.Combine(baseDir, "20151202194926.zip"); var imgDir = Path.GetFullPath(@"..\..\img"); var files = Directory.GetFiles(imgDir); var bCount = 0; var aCount = 0; using (ZipFile zip = new ZipFile(zipFix)) { // note: this does not recurse directories! String[] filenames = System.IO.Directory.GetFiles(imgDir); bCount = zip.Count; //删除一个文件 var fileName = "003.jpg"; var sourceFile = Path.Combine(imgDir, "004.jpg"); if (zip.ContainsEntry(fileName)) { var stream = File.OpenRead(sourceFile); var z = zip.UpdateEntry(fileName, stream); z.Comment = DateTime.Now.ToString(); } zip.Comment = String.Format("This zip archive was created by the CreateZip example application on machine '{0}'", System.Net.Dns.GetHostName()); zip.Save(); aCount = zip.Count; } } /// <summary> /// 删除 zip 中指定文件 /// </summary> [TestMethod] public void DeleteFromZip() { var baseDir = Path.GetFullPath(@"..\..\zips"); var zipPath = Path.Combine(baseDir, string.Format("{0}.zip", DateTime.Now.ToString("yyyyMMddHHmmss"))); var zipFix = Path.Combine(baseDir, "20151202194926.zip"); var imgDir = Path.GetFullPath(@"..\..\img"); var files = Directory.GetFiles(imgDir); var bCount = 0; var aCount = 0; using (ZipFile zip = new ZipFile(zipFix)) { // note: this does not recurse directories! String[] filenames = System.IO.Directory.GetFiles(imgDir); bCount = zip.Count; //删除一个文件 if(zip.ContainsEntry("002.jpg")) zip.RemoveEntry("002.jpg"); //删除一个文件,目录 var removeFile = "/aa/002.jpg"; if (zip.ContainsEntry(removeFile)) zip.RemoveEntry(removeFile); zip.Comment = String.Format("This zip archive was created by the CreateZip example application on machine '{0}'", System.Net.Dns.GetHostName()); zip.Save(); aCount = zip.Count; } Assert.IsTrue(bCount-1==aCount); } /// <summary> /// 解压缩 zip /// </summary> [TestMethod] public void ExtractZip() { var baseDir = Path.GetFullPath(@"..\..\zips"); var zipPath = Path.Combine(baseDir, string.Format("{0}.zip", DateTime.Now.ToString("yyyyMMddHHmmss"))); var zipFix = Path.Combine(baseDir, "20151202194926.zip"); var imgDir = Path.GetFullPath(@"..\..\img"); var files = Directory.GetFiles(imgDir); var bCount = 0; var aCount = 0; using (ZipFile zip = new ZipFile(zipFix)) { var dir = Path.Combine(baseDir, "Extract"); zip.ExtractAll(dir); } } /// <summary> /// 提取一个 文件 /// </summary> [TestMethod] public void ExtractZipByName() { var baseDir = Path.GetFullPath(@"..\..\zips"); var zipPath = Path.Combine(baseDir, string.Format("{0}.zip", DateTime.Now.ToString("yyyyMMddHHmmss"))); var zipFix = Path.Combine(baseDir, "20151202194926.zip"); var imgDir = Path.GetFullPath(@"..\..\img"); var files = Directory.GetFiles(imgDir); var bCount = 0; var aCount = 0; byte[] content = null; //转换stream为byte[] Func<Stream, byte[]> toByteArray = (stream) => { byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); // 设置当前流的位置为流的开始 stream.Seek(0, SeekOrigin.Begin); return bytes; }; var fileName = "004.jpg"; using (ZipFile zip = new ZipFile(zipFix)) { if (zip.ContainsEntry(fileName)) { //在跟目录找 var entrys = zip.SelectEntries(fileName,""); var entry = entrys.FirstOrDefault(); //将文件解压到内存流 using (var stream = new MemoryStream()) { entry.Extract(stream); stream.Seek(0, SeekOrigin.Begin); content = toByteArray(stream); } //在aa目录找 var entrys1 = zip.SelectEntries(fileName, "aa"); var entry1 = entrys.FirstOrDefault(); } } //创建文件 var extractImg = Path.Combine(baseDir, fileName); File.WriteAllBytes(extractImg, content); Assert.IsTrue(File.Exists(extractImg)); } } }
相关文章推荐
- c#如何将winform窗体封装成可以引用的dll文件
- C#使用事务
- C#邮箱发送验证码
- C#实现简单聊天程序的方法
- C#邮箱发送
- C#类型转换总结(三)各类型转化实例
- C# 八进制数值字符串转换成ASCII 字符串相互转换
- C# 操作自定义config文件
- c#生成时间戳
- C# 函数中的out型参数
- C#模拟windows账户登录,并复制文件代码
- c#之时间戳与DateTime的相互转换
- c#读取excel的xls和xlsx文件的方法
- C#.net 数据操作--excel 操作类
- C#中的扩展方法学习总结
- C# AOP框架入门
- 基于C#实现的高斯正反算公式实现的国家大地2000坐标转换功能
- pp看书笔记---C#高级编程第九版 第四章 【继承】
- c#面向对象
- C#中数组、ArrayList和List三者的区别