C#中文件压缩及解压操作
<div id="cnblogs_post_body">新手一枚,这是我的处女作,希望大家觉得不好的地方提出来一起讨论讨论。首先要用到一个外部组件,大家可以到http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx这里下载
我也找了很多类似的资料,把它们综合了一下,更人性化了些大家拿去直接可以使用。
-------------------------------------------压缩类---------------------------------------------------
<div class="cnblogs_code"> 1 using System; 2 using System.IO; 3 using ICSharpCode.SharpZipLib.Checksums; 4 using ICSharpCode.SharpZipLib.Zip; 5 using ICSharpCode.SharpZipLib.GZip; 6 7 namespace ZipFile 8 { 9 /// <summary>10 /// 压缩文件11 /// </summary>12 public class ZipHelp13 {14 public string ZipName { get; set; }15 /// <summary>16 /// 压缩文件夹17 /// </summary>18 /// <param name="zipSourcePath">需要压缩的文件夹路径(全路径)</param>19 /// <param name="zipToFilePath">压缩后保存的路径且必须带后缀名如:D:\\aa.zip(如果为空字符则默认保存到同级文件夹名称为源文件名)</param>20 public void ZipFileMain(string zipSourcePath,string zipToFilePath)21 {22 string[] filenames = Directory.GetFiles(zipSourcePath);23 ZipName = zipSourcePath.Substring(zipSourcePath.LastIndexOf("\\")+1);24 //定义压缩更目录对象25 Crc32 crc = new Crc32();26 ZipOutputStream s = new ZipOutputStream(File.Create(zipToFilePath.Equals("")? zipSourcePath+".zip":zipToFilePath));27 28 s.SetLevel(6); // 设置压缩级别29 //递归压缩文件夹下的所有文件和字文件夹30 AddDirToDir(crc, s,zipSourcePath);31 32 s.Finish();33 s.Close();34 }35 /// <summary>36 /// 压缩单个文件37 /// </summary>38 /// <param name="zipSourcePath">需要压缩的文件路径(全路径)</param>39 /// <param name="zipToFilePath">压缩后保存的文件路径(如果是空字符则默认压缩到同目录下文件名为源文件名)</param>40 public void ZipByFile(string zipSourcePath,string zipToFilePath)41 {42 //定义压缩更目录对象43 Crc32 crc = new Crc32();44 string dirName = zipSourcePath.Substring(zipSourcePath.LastIndexOf("\\") + 1, zipSourcePath.LastIndexOf(".") - (zipSourcePath.LastIndexOf("\\") + 1)) + ".zip";45 ZipOutputStream s = new ZipOutputStream(File.Create(zipToFilePath.Equals("")? zipSourcePath.Substring(0,zipSourcePath.LastIndexOf("\\"))+"\\"+ dirName:zipToFilePath));46 s.SetLevel(6); // 设置压缩级别47 AddFileToDir(crc,s,zipSourcePath,0);48 s.Finish();49 s.Close();50 }51 /// <summary>52 /// 压缩单个文件到指定压缩文件夹下(内部调用)53 /// </summary>54 /// <param name="crc"></param>55 /// <param name="s"></param>56 /// <param name="file">文件路径</param>57 public void AddFileToDir(Crc32 crc,ZipOutputStream s,string file,int dotype)58 {59 FileStream fs = File.OpenRead(file);60 byte[] buffer = new byte;61 fs.Read(buffer, 0, buffer.Length);62 string filename="";63 if (dotype == 0)64 filename = file.Substring(file.LastIndexOf("\\") + 1);65 else66 filename = file.Substring(file.IndexOf(ZipName));67 ZipEntry entry = new ZipEntry(filename);68 entry.DateTime = DateTime.Now;69 entry.Size = fs.Length;70 fs.Close();71 crc.Reset();72 crc.Update(buffer);73 entry.Crc = crc.Value;74 s.PutNextEntry(entry);75 s.Write(buffer, 0, buffer.Length);76 }77 /// <summary>78 /// 递归文件夹层级(内部调用)79 /// </summary>80 /// <param name="crc"></param>81 /// <param name="s"></param>82 /// <param name="file"></param>83 public void AddDirToDir(Crc32 crc, ZipOutputStream s, string file)84 {85 //添加此文件夹下的文件86 string[] files = Directory.GetFiles(file);87 foreach (string i in files)88 {89 AddFileToDir(crc,s,i,1);90 }91 //查询此文件夹下的子文件夹92 string[] dirs=Directory.GetDirectories(file);93 foreach (string i in dirs)94 {95 AddDirToDir(crc,s,i);96 }97 }98 }99 }
页:
[1]