使用ZIPEntry类压缩/解压文件夹
先从网上下载ICSharpCode.SharpZipLib.dll类库
ZipOutputStream:压缩,zip文件
  ZipEntry对象:
  /结尾:文件夹:  aa/
  没有/结尾:文件
ZipInputStream:解压:
读取的每一个元素都是zipEntry类的对象。
利用ZipEntry类的属性:isDirectory判断是否为文件夹
ZipEntry类--java.util.zip Class ZipEntry
public class ZipEntry extends Object implements java.util.zip.ZipConstants, Cloneable
此类代表一个Zip文件实体(项)
构建器
public ZipEntry(String?name) :用特殊的名字来创建一个新的zip对象(不能使用中文)
public ZipEntry(ZipEntry?e) :用另外一个实体对象来创建新的实体对象
实例方法
public String  getComment() :得到此实体的注释,没有则返回null
范例:
public boolean isDirectory() :判断是否是一个目录实体,即是否是目录,系统将依靠此zip实体的名字中是否以一个 / 结束来做判断,有,则是目录,没有,则不是目录
public String toString() :返回代表Zip实体的字符串表示
public long getCompressedSize() :得到此实体的压缩后的大小,返回-1表示未知
public String  getName() :得到实体的名字
public void setTime(long?time) :设置此实体修改的时间,时间从纪元开始到修改时间的毫秒数字
public long getTime() :得到此实体修改的时间
public void setSize(long?size) : 设定该实体的字节大小
public long getSize() :得到此实体的大小
public void setCrc(long?crc) :设置该实体的校验和
public long getCrc()  :得到该实体的校验和
1、压缩文件夹
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.GZip;
using System.IO;
private void button1_Click(object sender, EventArgs e)
        {
  ZipFile("E:\\ziptest", "E:\\ziptest.zip");
        }
        public void ZipFile(string strFile, string strZip)
        {
            if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar)
                strFile += Path.DirectorySeparatorChar;
            ZipOutputStream s = new ZipOutputStream(File.Create(strZip));
            s.SetLevel(6);
            // 0 - store only to 9 - means best compression 
            zip(strFile, s, strFile);
            s.Finish();
            s.Close();
        }
        private void zip(string strFile, ZipOutputStream s, string staticFile)
        {
            if (strFile[strFile.Length - 1] != Path.DirectorySeparatorChar) strFile += Path.DirectorySeparatorChar;
            Crc32 crc = new Crc32();
            string[] filenames = Directory.GetFileSystemEntries(strFile);
            foreach (string file in filenames)
            {
                if (Directory.Exists(file))
                { zip(file, s, staticFile); }
                else // 否则直接压缩文件     
                {                //打开压缩文件   
                    FileStream fs = File.OpenRead(file);
                    byte[] buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    string tempfile = file.Substring(staticFile.LastIndexOf("\\") + 1);
                    ZipEntry entry = new ZipEntry(tempfile);
                    entry.DateTime = DateTime.Now;
                    entry.Size = fs.Length;
                    fs.Close();
                    crc.Reset();
                    crc.Update(buffer);
                    entry.Crc = crc.Value;
                    s.PutNextEntry(entry);
                    s.Write(buffer, 0, buffer.Length);
                }
            }
        }
2、解压
string unZipFile(string TargetFile, string fileDir)
        {
            string rootFile = " ";
            try
            {
                //读取压缩文件(zip文件),准备解压缩         
                ZipInputStream s = new ZipInputStream(File.OpenRead(TargetFile.Trim()));
                ZipEntry theEntry;
                string path = fileDir;
                //解压出来的文件保存的路径         
                string rootDir = " ";
                //根目录下的第一个子文件夹的名称       
                while ((theEntry = s.GetNextEntry()) != null)
                {
                    rootDir = Path.GetDirectoryName(theEntry.Name);
                    //得到根目录下的第一级子文件夹的名称
gzip是什么文件夹                    if (rootDir.IndexOf("\\") >= 0)
                    {
                        rootDir = rootDir.Substring(0, rootDir.IndexOf("\\") + 1);
                    }
                    string dir = Path.GetDirectoryName(theEntry.Name);
                    //根目录下的第一级子文件夹的下的文件夹的名称     
                    string fileName = Path.GetFileName(theEntry.Name);
                    //根目录下的文件名称           
                    if (dir != " ")
                    //创建根目录下的子文件夹,不限制级别   
                    {
                        if (!Directory.Exists(fileDir + "\\" + dir))

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。