路过秋天

同样的3年,有的人从学生到当了MVP了,而我却在原地,卖弄当年的代码,秋天的风,有点凄,有点凉!

公告信息
内涵是很强大的~~~别看外表~~~当犀利哥入侵不了的时候,感觉有种莫名的失落~~~
文章档案
最新评论

解压缩到根目录失败问题解决办法(ICSharpCode.SharpZipLib)


微博粉丝精灵的升级解压一直用的ICSharpCode.SharpZipLib,解压缩程序代码是源用以前网上一堆一堆的代码,竟然有一个天大的Bug,根目录解压会失效,代码大致如下:

  /**/
        /// <summary>
        /// 实现解压操作
        /// </summary>
        /// <param name="zipfilename">要解压文件Zip(物理路径)</param>
        /// <param name="UnZipDir">解压目的路径(物理路径)</param>
        /// <param name="password">解压密码</param>
        /// <returns>异常信息</returns>
        public static bool UnPack(string zipfilename, string UnZipDir, string password)
        {

            //判断待解压文件路径
            if (!File.Exists(zipfilename))
            {
                return false;
            }

            //创建ZipInputStream
            ZipInputStream newinStream = new ZipInputStream(File.OpenRead(zipfilename));

            //判断Password
            if (password != null && password.Length > 0)
            {
                newinStream.Password = password;
            }

            //执行解压操作
            try
            {
                ZipEntry theEntry;

                //获取Zip中单个File
                while ((theEntry = newinStream.GetNextEntry()) != null)
                {

                    //判断目的路径
                    if (!Directory.Exists(UnZipDir))
                    {
                        Directory.CreateDirectory(UnZipDir);//创建目的目录
                    }

                    //获得目的目录信息
                    string Driectoryname = Path.GetDirectoryName(UnZipDir);
                    string pathname = Path.GetDirectoryName(theEntry.Name);//获得子级目录
                    string filename = Path.GetFileName(theEntry.Name);//获得子集文件名

                    //处理文件盘符问题
                    pathname = pathname.Replace(":", "$");//处理当前压缩出现盘符问题
                    Driectoryname = Driectoryname + "\\" + pathname;

                    //创建
                    if (!Directory.Exists(Driectoryname))
                    {
                        Directory.CreateDirectory(Driectoryname);
                    }
                    //解压指定子目录
                    if (filename != string.Empty)
                    {
                        FileStream newstream = File.Create(Driectoryname + "\\" + filename);

                        int size = 2048;

                        byte[] newbyte = new byte[size];

                        while (true)
                        {
                            size = newinStream.Read(newbyte, 0, newbyte.Length);

                            if (size > 0)
                            {
                                //写入数据
                                newstream.Write(newbyte, 0, size);
                            }
                            else
                            {
                                break;
                            }
                        }
                        newstream.Close();
                    }

                }
                newinStream.Close();
            }
            catch (Exception se)
            {
                throw new Exception(se.Message);
            }
            finally
            {
                newinStream.Close();
            }

            return true;
        }
 
以上代码算是网上比较普遍的,当然我也修改了一下,没想到这一堆一堆的代码,竟然有Bug,就是无法解压到根目录下去,直到最近,才发现了这个问题了,后来发现很简单的代码,记录一下,如下:

 /// ;summary;
    /// UnZip 类用于解压缩一个 zip 文件。
    /// ;/summary;
    public class UnZipDir
    {

     //解压缩以后的文件名和路径,压缩前的路径
        public static Boolean UNZipFile(string FileToZip, string ZipedFile)
        {
            try
            {
                FastZip fastZip = new FastZip();
                fastZip.ExtractZip(FileToZip, ZipedFile, "");
                return true;
            }
            catch { 
                return false; 
            }

        }


        public static Boolean ZipFile(string FileToZip, string ZipedFile)
        {

            try
            {
                FastZip fastZip = new FastZip();
                
                bool recurse = true;

               //压缩后的文件名,压缩目录 ,是否递归          

             fastZip.CreateZip(FileToZip, ZipedFile, recurse, "");
                return true;
            }
            catch { return false; }
        
        }

    }

以上代码就几行,而且可解决根目录失效的问题,因此,赶紧换上了代码,修正了Bug。

真是人算不如天算,这Bug隐藏了太久了。


秋色园是QBlog的官方站点,由路过秋天创建,基于cyqdata数据层框架开发的支持多用户、多语言、多数据库(access,mssql,oracle)、目录级url等功能强大的博客系统
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"

2012/2/25 1:00:45 | C# Winform基础 | |

#1xjwebs2012/6/5 10:52:26
mark学习了。
  • 发表评论