C#壓縮文件可以使用第三方dll庫:ICSharpCode.SharpZipLib.dll;
以下代碼能實現文件夾與多個文件的同時壓縮。(例:把三個文件夾和五個文件一起壓縮成一個zip)
直接上代碼,代碼來自:http://blog.csdn.net/jk007/article/details/8115825
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.IO;
6 using System.Diagnostics;
7 using ICSharpCode.SharpZipLib;
8 using ICSharpCode.SharpZipLib.Zip;
9 using ICSharpCode.SharpZipLib.Checksums;
10 using ICSharpCode.SharpZipLib.Core;
11
12 namespace TestForm
13
14 {
15 public class ZipHelper
16 {
17 /// <summary>
18 /// 壓縮文件
19 /// </summary>
20 /// <param name="sourceFilePath"></param>
21 /// <param name="destinationZipFilePath"></param>
22 public static void CreateZip(string sourceFilePath, string destinationZipFilePath)
23 {
24 if (sourceFilePath[sourceFilePath.Length - 1] != System.IO.Path.DirectorySeparatorChar)
25 sourceFilePath += System.IO.Path.DirectorySeparatorChar;
26 ZipOutputStream zipStream = new ZipOutputStream(File.Create(destinationZipFilePath));
27 zipStream.SetLevel(6); // 壓縮級別 0-9
28 CreateZipFiles(sourceFilePath, zipStream);
29 zipStream.Finish();
30 zipStream.Close();
31 }
32 /// <summary>
33 /// 遞歸壓縮文件
34 /// </summary>
35 /// <param name="sourceFilePath">待壓縮的文件或文件夾路徑</param>
36 /// <param name="zipStream">打包結果的zip文件路徑(類似 D:\WorkSpace\a.zip),全路徑包括文件名和.zip擴展名</param>
37 /// <param name="staticFile"></param>
38 private static void CreateZipFiles(string sourceFilePath, ZipOutputStream zipStream)
39 {
40 Crc32 crc = new Crc32();
41 string[] filesArray = Directory.GetFileSystemEntries(sourceFilePath);
42 foreach (string file in filesArray)
43 {
44 if (Directory.Exists(file)) //如果當前是文件夾,遞歸
45 {
46 CreateZipFiles(file, zipStream);
47 }
48 else //如果是文件,開始壓縮
49 {
50 FileStream fileStream = File.OpenRead(file);
51 byte[] buffer = new byte[fileStream.Length];
52 fileStream.Read(buffer, 0, buffer.Length);
53 string tempFile = file.Substring(sourceFilePath.LastIndexOf("\\") + 1);
54 ZipEntry entry = new ZipEntry(tempFile);
55 entry.DateTime = DateTime.Now;
56 entry.Size = fileStream.Length;
57 fileStream.Close();
58 crc.Reset();
59 crc.Update(buffer);
60 entry.Crc = crc.Value;
61 zipStream.PutNextEntry(entry);
62 zipStream.Write(buffer, 0, buffer.Length);
63 }
64 }
65 }
66 }
67 }
運行時可能發生報錯,斷點不能進入該類中的函數,故障信息為不能加載該程序集。
故障分析:
1. 在下載dll文件後切不可在工程外部直接引用dll,把其放在自己工程的bin目錄下。
2. 注意該dll的版本,可能是32位的,可能是64位的,那麼在VS的生成中就要設置相應的目標平台。32位對應於X86,64位對應X64。
