asp.net使用ICSharpCode.SharpZipLib.dll实现Zip压缩包的压缩与解压及RAR压缩包的解压

 

下载ICSharpCode.SharpZipLib.dll并添加到项目中。

压缩文件(.zip格式)

        /// <summary>

        /// 压缩文件(.zip格式)

        /// </summary>

        /// <param name="strFile">待压缩文件完整路径</param>

        /// <param name="strZip">压缩后的目标文件存放路径</param>

        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();

        }

 

 

        /// <summary>

        /// 压缩

        /// </summary>

        /// <param name="strFile">待压缩文件完整路径</param>

        /// <param name="s"></param>

        /// <param name="staticFile">压缩后的目标文件存放路径</param>

        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);

                }

            }

        }

 

解压文件(.zip压缩包)

      /// <summary>

        /// 解压文件

        /// </summary>

        /// <param name="TargetFile">待解压文件路径</param>

        /// <param name="fileDir">解压后保存的路径</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 != " ")

                    //创建根目录下的子文件夹,不限制级别

                    {

                        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;

            }

        }

 

Rar的解压

   /// <summary>

        /// rar压缩包解压

        /// </summary>

        /// <param name="filefrom">待解压文件路径</param>

        /// <param name="tofile">解压后存放的路径</param>

        /// <returns></returns>

        public bool jieya( string filefrom,string tofile)

        {

            try

            {

                //解压Rar文件 

                string ServerDir = @"C:\Program Files\WinRAR";//rar路径 

                System.Diagnostics.Process Process1 = new Process();

                Process1.StartInfo.FileName = ServerDir + "\\Rar.exe";

                Process1.StartInfo.Arguments = " x -inul -y " + filefrom + " " + tofile;

                Process1.Start();//解压开始 

                while (!Process1.HasExited)           //等待解压的完成 

                {

                }

                return true;

            }

            catch (Exception ex)

            {

                return false;

            }

 

        }

 

posted @ 2013-05-22 15:45  LannyLiu  阅读(383)  评论(0编辑  收藏  举报