zoukankan      html  css  js  c++  java
  • Using ICSharpCode.SharpZipLib for zip file

    View Code
    1 try
    2 {
    3 VQP.Common.FZip fileZip = new VQP.Common.FZip();
    4 fileZip.FileNamesToZIP = new List<string>();
    5 fileZip.FileNamesToZIP.Add(@"C:\test.txt");
    6 fileZip.FileNameZipped = @"C:\test.zip";
    7 fileZip.ZipFiles();
    8 }
    9 catch (Exception ex)
    10 {
    11 lblMessage.Text = ex.ToString();
    12 }

    View Code
    1 using System;
    2  using System.Collections.Generic;
    3 using System.Text;
    4 using ICSharpCode.SharpZipLib.Zip;
    5 using ICSharpCode.SharpZipLib.Checksums;
    6 using ICSharpCode.SharpZipLib.GZip;
    7 using System.IO;
    8
    9 namespace VQP.Common
    10 {
    11 public class FZip : IDisposable
    12 {
    13 private string m_FolderToZIP;
    14 private List<string> m_FileNamesToZIP;
    15 private string m_FileNameZipped;
    16
    17 private ZipOutputStream m_ZipStream = null;
    18 private Crc32 m_Crc;
    19
    20 #region Begin for Public Properties
    21 /// <summary>
    22 /// Folder Name to ZIP
    23 /// Like "C:Test"
    24 /// </summary>
    25 public string FolderToZIP
    26 {
    27 get { return m_FolderToZIP; }
    28 set { m_FolderToZIP = value; }
    29 }
    30
    31 /// <summary>
    32 /// File Name to ZIP
    33 /// Like "C:TestTest.txt"
    34 /// </summary>
    35 public List<string> FileNamesToZIP
    36 {
    37 get { return m_FileNamesToZIP; }
    38 set { m_FileNamesToZIP = value; }
    39 }
    40
    41 /// <summary>
    42 /// Zipped File Name
    43 /// Like "C:TestMyZipFile.ZIP"
    44 /// </summary>
    45 public string FileNameZipped
    46 {
    47 get { return m_FileNameZipped; }
    48 set { m_FileNameZipped = value; }
    49 }
    50 #endregion
    51
    52 /// <summary>
    53 /// The construct
    54 /// </summary>
    55 public FZip()
    56 {
    57 this.m_FolderToZIP = "";
    58 this.m_FileNamesToZIP = new List<string>();
    59 this.m_FileNameZipped = "";
    60 }
    61
    62 #region ZipFolder
    63 /// <summary>
    64 /// Zip one folder : single level
    65 /// Before doing this event, you must set the Folder and the ZIP file name you want
    66 /// </summary>
    67 public void ZipFolder()
    68 {
    69 if (this.m_FolderToZIP.Trim().Length == 0)
    70 {
    71 throw new Exception("You must setup the folder name you want to zip!");
    72 }
    73
    74 if(Directory.Exists(this.m_FolderToZIP) == false)
    75 {
    76 throw new Exception("The folder you input does not exist! Please check it!");
    77 }
    78
    79 if (this.m_FileNameZipped.Trim().Length == 0)
    80 {
    81 throw new Exception("You must setup the zipped file name!");
    82 }
    83
    84 string[] fileNames = Directory.GetFiles(this.m_FolderToZIP.Trim());
    85
    86 if (fileNames.Length == 0)
    87 {
    88 throw new Exception("Can not find any file in this folder(" + this.m_FolderToZIP + ")!");
    89 }
    90
    91 // Create the Zip File
    92 this.CreateZipFile(this.m_FileNameZipped);
    93
    94 // Zip all files
    95 foreach(string file in fileNames)
    96 {
    97 this.ZipSingleFile(file);
    98 }
    99
    100 // Close the Zip File
    101 this.CloseZipFile();
    102 }
    103 #endregion
    104
    105 #region ZipFiles
    106 /// <summary>
    107 /// Zip files
    108 /// Before doing this event, you must set the Files name and the ZIP file name you want
    109 /// </summary>
    110 public void ZipFiles()
    111 {
    112 if (this.m_FileNamesToZIP.Count == 0)
    113 {
    114 throw new Exception("You must setup the files name you want to zip!");
    115 }
    116
    117 foreach(object file in this.m_FileNamesToZIP)
    118 {
    119 if(File.Exists(((string)file).Trim()) == false)
    120 {
    121 throw new Exception("The file(" + (string)file + ") you input does not exist! Please check it!");
    122 }
    123 }
    124
    125 if (this.m_FileNameZipped.Trim().Length == 0)
    126 {
    127 throw new Exception("You must input the zipped file name!");
    128 }
    129
    130 // Create the Zip File
    131 this.CreateZipFile(this.m_FileNameZipped);
    132
    133 // Zip this File
    134 foreach(object file in this.m_FileNamesToZIP)
    135 {
    136 this.ZipSingleFile((string)file);
    137 }
    138
    139 // Close the Zip File
    140 this.CloseZipFile();
    141 }
    142 #endregion
    143
    144 #region CreateZipFile
    145 /// <summary>
    146 /// Create Zip File by FileNameZipped
    147 /// </summary>
    148 /// <param name="fileNameZipped">zipped file name like "C:TestMyZipFile.ZIP"</param>
    149 private void CreateZipFile(string fileNameZipped)
    150 {
    151 this.m_Crc = new Crc32();
    152 this.m_ZipStream = new ZipOutputStream(File.Create(fileNameZipped));
    153 this.m_ZipStream.SetLevel(6); // 0 - store only to 9 - means best compression
    154 }
    155 #endregion
    156
    157 #region CloseZipFile
    158 /// <summary>
    159 /// Close the Zip file
    160 /// </summary>
    161 private void CloseZipFile()
    162 {
    163 this.m_ZipStream.Finish();
    164 this.m_ZipStream.Close();
    165 this.m_ZipStream = null;
    166 }
    167 #endregion
    168
    169 #region ZipSingleFile
    170 /// <summary>
    171 /// Zip single file
    172 /// </summary>
    173 /// <param name="fileName">file name like "C:TestTest.txt"</param>
    174 private void ZipSingleFile(string fileNameToZip)
    175 {
    176 // Open and read this file
    177 FileStream fso = File.OpenRead(fileNameToZip);
    178
    179 // Read this file to Buffer
    180 byte[] buffer = new byte[fso.Length];
    181 fso.Read(buffer,0,buffer.Length);
    182
    183 // Create a new ZipEntry
    184 ZipEntry zipEntry = new ZipEntry(fileNameToZip);
    185 // ZipEntry zipEntry = new ZipEntry(fileNameToZip.Split('\')[fileNameToZip.Split('\').Length - 1]);
    186
    187 zipEntry.DateTime = DateTime.Now;
    188 // set Size and the crc, because the information
    189 // about the size and crc should be stored in the header
    190 // if it is not set it is automatically written in the footer.
    191 // (in this case size == crc == -1 in the header)
    192 // Some ZIP programs have problems with zip files that don't store
    193 // the size and crc in the header.
    194 zipEntry.Size = fso.Length;
    195
    196 fso.Close();
    197 fso = null;
    198
    199 // Using CRC to format the buffer
    200 this.m_Crc.Reset();
    201 this.m_Crc.Update(buffer);
    202 zipEntry.Crc = this.m_Crc.Value;
    203
    204 // Add this ZipEntry to the ZipStream
    205 this.m_ZipStream.PutNextEntry(zipEntry);
    206 this.m_ZipStream.Write(buffer,0,buffer.Length);
    207 }
    208 #endregion
    209
    210 #region IDisposable member
    211
    212 /// <summary>
    213 /// Release all objects
    214 /// </summary>
    215 public void Dispose()
    216 {
    217 if(this.m_ZipStream != null)
    218 {
    219 this.m_ZipStream.Close();
    220 this.m_ZipStream = null;
    221 }
    222 }
    223
    224 #endregion
    225 }
    226 }

  • 相关阅读:
    35 点击全图后发现地图“不见了”
    34 文件地理数据库(GDB)变文件夹了怎么办
    33 ArcToolBox学习系列之数据管理工具箱——投影与变换(Projections and Transformations)未完待续……
    32 ArcToolBox学习系列之数据管理工具箱——属性域(Domains)的两种创建及使用方式
    30 ArcGIS 许可管理器常见问题(持续更新中……)
    算法竞赛入门经典 第三章 简要题解
    SCOI2003 字符串折叠 & NEERC2002 Folding 题解
    Vjios 1617 超级教主
    Codeforces Round #652 题解
    Codeforces Round #655 题解
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/2052046.html
Copyright © 2011-2022 走看看