文件夹和文件压缩

2/10/2017来源:ASP.NET技巧人气:334

        ///<summary>
        ///功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略)
        ///</summary>
        ///<paramname="dirPath">被压缩的文件夹夹路径</param>
        ///<paramname="zipFilePath">生成压缩文件的路径,为空则默认与被压缩文件夹同一级目录,名称为:文件夹名+.zip</param>
        ///<paramname="err">出错信息</param>
        ///<returns>是否压缩成功</returns>
        publicboolZipFile(string dirPath,stringzipFilePath,outstringerr)
        {
           err = "";
            if(dirPath == string.Empty)
            {
               err = "要压缩的文件夹不能为空!";
               return false;
            }
            if(!Directory.Exists(dirPath))
            {
               err = "要压缩的文件夹不存在!";
               return false;
            }
            //压缩文件名为空时使用文件夹名+.zip
            if(zipFilePath == string.Empty)
            {
               if (dirPath.EndsWith("\\"))
               {
                   dirPath = dirPath.Substring(0, dirPath.Length - 1);
               }
               zipFilePath = dirPath + ".zip";
            }
 
            try
            {
               string[] filenames =Directory.GetFiles(dirPath);
               using (ZipOutputStreams =newZipOutputStream(File.Create(zipFilePath)))
               {
                   s.SetLevel(9);
                   byte[] buffer =newbyte[4096];
                   foreach (stringfilein filenames)
                   {
                        ZipEntry entry =newZipEntry(Path.GetFileName(file));
                        entry.DateTime = DateTime.Now;
                        s.PutNextEntry(entry);
                        using(FileStream fs =File.OpenRead(file))
                        {
                            intsourceBytes;
                            do
                            {
                                sourceBytes =fs.Read(buffer, 0, buffer.Length);
                                s.Write(buffer,0, sourceBytes);
                            } while(sourceBytes > 0);
                        }
                   }
                   s.Finish();
                   s.Close();
               }
            }
            catch(Exception ex)
            {
               err = ex.Message;
               return false;
            }
            returntrue;
        }