那位大哥提供下代码,感激涕淋!

解决方案 »

  1.   

    C#使用ICSharpCode.SharpZipLib压缩文件 
    http://blog.csdn.net/venus0314/archive/2006/09/25/1280610.aspx
      

  2.   

    引用   ICSharpCode.SharpZipLib
    public static byte[] Compress(byte[] data)
            {
                MemoryStream ms = new MemoryStream();
                GZipStream stream = new GZipStream(ms, CompressionMode.Compress);
                stream.Write(data, 0, data.Length);
                stream.Close();
                return ms.ToArray();
            }        public static byte[] Decompress(byte[] data)
            {
                MemoryStream ms = new MemoryStream();
                ms.Write(data, 0, data.Length);
                ms.Position = 0;
                GZipStream stream = new GZipStream(ms, CompressionMode.Decompress);
                MemoryStream temp = new MemoryStream();
                byte[] buffer = new byte[1];
                while (true)
                {
                    int read = stream.Read(buffer, 0, buffer.Length);
                    if (read <= 0)
                    {
                        break;
                    }
                    else
                    {
                        temp.Write(buffer, 0, buffer.Length);
                    }
                }
                stream.Close();
                return temp.ToArray();
            }
      

  3.   

    不论zip文件里有多少文件和文件夹,我都能解压缩
    /// <summary>
        /// 解压缩文件
        /// </summary>
        /// <param name="TargetFile">待解压的文件</param>
        /// <param name="fileDir">解压出来的文件保存的路径</param>
        /// <param name="ErrorMessage"></param>
        /// <returns></returns>
        public 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);             //得到根目录下的第一级子文件夹的名称
                    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 != "" && fileName == "")                            //创建根目录下的子文件夹,不限制级别
                    {
                        if (!Directory.Exists(fileDir + "\\" + dir))
                        {
                            path = fileDir + "\\" + dir;                        //在指定的路径创建文件夹
                            Directory.CreateDirectory(path);
                        }
                    }
                    else if (dir == "" && fileName != "")                       //根目录下的文件
                    {
                        path = fileDir;
                        rootFile = fileName;
                    }
                    else if (dir != "" && fileName != "")                       //根目录下的第一级子文件夹下的文件
                    {
                        if (dir.IndexOf("\\") > 0)                              //指定文件保存的路径
                        {
                            path = fileDir + "\\" + dir;
                        }
                    }                if (dir == rootDir)                                         //判断是不是需要保存在根目录下的文件
                    {
                        path = fileDir + "\\" + rootDir;
                    }                //以下为解压缩zip文件的基本步骤
                    //基本思路就是遍历压缩文件里的所有文件,创建一个相同的文件。
                    if (fileName != String.Empty)
                    {
                        FileStream streamWriter = File.Create(path + "\\" + fileName);                    int size = 2048;
                        byte[] data = new byte[2048];
                        while (true)
                        {
                            size = s.Read(data, 0, data.Length);
                            if (size > 0)
                            {
                                streamWriter.Write(data, 0, size);
                            }
                            else
                            {
                                break;
                            }
                        }                    streamWriter.Close();
                    }
                }
                s.Close();            return rootFile;
            }
            catch (Exception ex)
            {
                return "1;" + ex.Message;
            }
        }