____陌℡ 发表于 2013-1-2 23:12:26

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]
查看完整版本: C#中文件压缩及解压操作