zoukankan      html  css  js  c++  java
  • c# ICSharpCode.SharpZipLib.Zip实现文件的压缩

    首先了解ZipOutPutStream和ZipEntry对象

    ZipOutPutStream对象

          如果要完成一个文件或文件夹的压缩,则要使用ZipOutputStream类。ZipOutputStream是OutputStream的子类,常用操作方法如表12-20所示。
    ZipOutputStream类的常用方法

    序号

       

    类型

       

    1

    public ZipOutputStream

    (OutputStream out)

    构造

    创建新的ZIP输出流

    2

    public void putNextEntry

    (ZipEntry e) throws IOException

    普通

    设置每一个

    ZipEntry对象

    3

    public void setComment

    (String comment)

    普通

    设置ZIP文件的注释

    ZipEntry对象

          此类代表一个Zip文件实体(项)
          构建器
          public ZipEntry(String?name) :用特殊的名字来创建一个新的zip对象(不能使用中文)
          public ZipEntry(ZipEntry?e) :用另外一个实体对象来创建新的实体对象
          实例方法
         public String  getComment() :得到此实体的注释,没有则返回null
         范例:
         public boolean isDirectory() :判断是否是一个目录实体,即是否是目录,系统将依靠此zip实体的名字中是否以一个 / 结束来做判断,有,则是目录,没有,则不是目录
         public String toString() :返回代表Zip实体的字符串表示
         public long getCompressedSize() :得到此实体的压缩后的大小,返回-1表示未知
         public String  getName() :得到实体的名字
         public void setTime(long?time) :设置此实体修改的时间,时间从纪元开始到修改时间的毫秒数字
         public long getTime() :得到此实体修改的时间
         public void setSize(long?size) : 设定该实体的字节大小
         public long getSize() :得到此实体的大小
         public void setCrc(long?crc) :设置该实体的校验和
         public long getCrc()  :得到该实体的校验和

         压缩单个文件代码示例:

        

      /// <summary>
            /// 压缩单个文件
            /// </summary>
            /// <param name="fileToZip">要压缩的文件</param>
            /// <param name="zipedFile">压缩后的文件</param>
            /// <param name="compressionLevel">压缩等级</param>
            /// <param name="blockSize">每次写入大小</param>
            public static void ZipFile(string fileToZip, string zipedFile, int compressionLevel, int blockSize)
            {
                //如果文件没有找到,则报错
                if (!System.IO.File.Exists(fileToZip))
                {
                    throw new System.IO.FileNotFoundException("指定要压缩的文件: " + fileToZip + " 不存在!");
                }
                using (System.IO.FileStream ZipFile = System.IO.File.Create(zipedFile))//創建并打開文件
                {
                    using (ZipOutputStream ZipStream = new ZipOutputStream(ZipFile))
                    {
                        using (System.IO.FileStream StreamToZip = new System.IO.FileStream(fileToZip, System.IO.FileMode.Open,         System.IO.FileAccess.Read))
                        {
                            string fileName = fileToZip.Substring(fileToZip.LastIndexOf("\") + 1);

                            ZipEntry ZipEntry = new ZipEntry(fileName);

                            ZipStream.PutNextEntry(ZipEntry);
                            ZipStream.Password = "";

                            ZipStream.SetLevel(compressionLevel);

                            byte[] buffer = new byte[blockSize];

                            int sizeRead = 0;

                            try
                            {
                                do
                                {
                                    sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);
                                    ZipStream.Write(buffer, 0, sizeRead);
                                }
                                while (sizeRead > 0);
                            }
                            catch (System.Exception ex)
                            {
                                throw ex;
                            }

                            StreamToZip.Close();
                        }

                        ZipStream.Finish();
                        ZipStream.Close();
                    }

                    ZipFile.Close();
                }
            }

     

     

  • 相关阅读:
    进阶篇:3.1.8)DFM塑胶-注射模具和设备
    PAT-甲级-1001-A+B Format
    腾讯-004-两个排序数组的中位数
    机器学习三 决策树
    腾讯-002-两数相加
    2018.3.15
    2018.3.14
    2018.3.13
    废代码合集
    边缘检测程序(matlab)
  • 原文地址:https://www.cnblogs.com/xiatianoo/p/4789819.html
Copyright © 2011-2022 走看看