zip解压

时间:2013-12-5    作者:悬浮的青春    分类: .net相关


引用第三方dll实现解压zip格式的文件

引用的dll是using ICSharpCode.SharpZipLib.Zip;
网上就有。想用的可以搜索下。

直接贴代码吧。下面就是。

    /// <summary>
    /// 功能:解压zip格式的文件
    /// </summary>
    /// <param name="zipFilePath"></param>
    /// <param name="unZipDir"></param>
    /// <param name="err"></param>
    private bool UnZipFile(string zipFilePath, string unZipDir, out string err)
    {
        err = "";
        if (zipFilePath == string.Empty)
        {
            err = "压缩文件不能为空!";
            return false;
        }
        if (!File.Exists(zipFilePath))
        {
            err = "压缩文件不存在!";
            return false;
        }
        //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹
        if (unZipDir == string.Empty)
            unZipDir = zipFilePath.Replace(System.IO.Path.GetFileName(zipFilePath), System.IO.Path.GetFileNameWithoutExtension(zipFilePath));
        if (!unZipDir.EndsWith("//"))
            unZipDir += "//";
        if (!Directory.Exists(unZipDir))
            Directory.CreateDirectory(unZipDir);

        try
        {
            using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))
            {

                ZipEntry theEntry;
                while ((theEntry = s.GetNextEntry()) != null)
                {
                    string directoryName = System.IO.Path.GetDirectoryName(theEntry.Name);
                    string fileName = System.IO.Path.GetFileName(theEntry.Name);
                    if (directoryName.Length > 0)
                    {
                        Directory.CreateDirectory(unZipDir + directoryName);
                    }
                    if (!directoryName.EndsWith("//"))
                        directoryName += "//";
                    if (fileName != String.Empty)
                    {
                        using (System.IO.FileStream streamWriter = File.Create(unZipDir + theEntry.Name))
                        {

                            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;
                                }
                            }
                        }
                    }
                }//while
            }
        }
        catch (Exception ex)
        {
            err = ex.Message;
            return false;
        }
        return true;
    }

WRITTEN BY

avatar