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 }

你可能感兴趣的:(File)