tft每日頭條

 > 生活

 > 電腦壓縮zip教程

電腦壓縮zip教程

生活 更新时间:2024-07-22 03:18:32

電腦壓縮zip教程?先定義一個枚舉,用于程序表示是哪個壓縮算法,今天小編就來說說關于電腦壓縮zip教程?下面更多詳細答案一起來看看吧!

電腦壓縮zip教程(C制作Zip壓縮包)1

電腦壓縮zip教程

先定義一個枚舉,用于程序表示是哪個壓縮算法。

01 /// <summary>

02 /// 壓縮枚舉

03 /// </summary>

04 public enum ZipEnum

05 {

06 //壓縮時間長,壓縮率高

07 BZIP2,

08

09 //壓縮效率高,壓縮率低

10 GZIP

11 }

單個文件的壓縮:

01 #region 制作壓縮包(單個文件壓縮)

02 /// <summary>

03 /// 制作壓縮包(單個文件壓縮)

04 /// </summary>

05 /// <param name="sourceFileName">原文件</param>

06 /// <param name="zipFileName">壓縮文件</param>

07 /// <param name="zipEnum">壓縮算法枚舉</param>

08 /// <returns>壓縮成功标志</returns>

09 public static bool ZipFile(string srcFileName, string zipFileName, ZipEnum zipEnum)

10 {

11 bool flag = true;

12 try

13 {

14 switch (zipEnum)

15 {

16 case ZipEnum.BZIP2:

17

18 FileStream inStream = File.OpenRead(srcFileName);

19 FileStream outStream = File.Open(zipFileName, FileMode.Create);

20

21 //參數true表示壓縮完成後,inStream和outStream連接都釋放

22 BZip2.Compress(inStream, outStream, true, 4096);

23

24 inStream.Close();

25 outStream.Close();

26

27

28 break;

29 case ZipEnum.GZIP:

30

31 FileStream srcFile = File.OpenRead(srcFileName);

32

33 GZipOutputStream zipFile = newGZipOutputStream(File.Open(zipFileName, FileMode.Create));

34

35 byte[] fileData = new byte[srcFile.Length];

36 srcFile.Read(fileData, 0, (int)srcFile.Length);

37 zipFile.Write(fileData, 0, fileData.Length);

38

39 srcFile.Close();

40 zipFile.Close();

41

42 break;

43 default: break;

44 }

45 }

46 catch

47 {

48 flag = false;

49 }

50 return flag;

51 }

52 #endregion

單個文件的解壓縮:

01 #region 解壓縮包(單個文件解壓縮)

02 /// <summary>

03 /// 解壓縮包(單個文件解壓縮)

04 /// </summary>

05 /// <param name="zipFileName">壓縮文件</param>

06 /// <param name="unzipFileName">解壓縮文件</param>

07 /// <param name="zipEnum">壓縮算法枚舉</param>

08 /// <returns>壓縮成功标志</returns>

09 public static bool UnZipFile(string zipFileName, stringunzipFileName, ZipEnum zipEnum)

10 {

11 bool flag = true;

12 try

13 {

14 switch (zipEnum)

15 {

16 case ZipEnum.BZIP2:

17 FileStream inStream = File.OpenRead(zipFileName);

18 FileStream outStream = File.Open(unzipFileName, FileMode.Create);

19 BZip2.Decompress(inStream, outStream, true);

20 break;

21 case ZipEnum.GZIP:

22 GZipInputStream zipFile = newGZipInputStream(File.OpenRead(zipFileName));

23 FileStream destFile = File.Open(unzipFileName, FileMode.Create);

24

25 int bufferSize = 2048 * 2;

26 byte[] fileData = new byte[bufferSize];

27

28 while (bufferSize > 0)

29 {

30 bufferSize = zipFile.Read(fileData, 0, bufferSize);

31 zipFile.Write(fileData, 0, bufferSize);

32 }

33 destFile.Close();

34 zipFile.Close();

35 break;

36 default: break;

37 }

38 }

39 catch

40 {

41 flag = false;

42 }

43 return flag;

44 }

45 #endregion

上面的兩個方法在引用了dll後,可以直接使用。

看到這裡,相信讀者有疑問了,如果我想讓多個文件壓縮到1個zip包裡呢?甚至可以給文件加密?給zip包加注釋?

好吧,我這裡繼續貼兩個方法,都經過測試,可用。

制作壓縮包

01 #region 制作壓縮包(将多個文件壓縮到一個壓縮包,支持加密、注釋)

02 /// <summary>

03 /// 制作壓縮包(多個文件壓縮到一個壓縮包,支持加密、注釋)

04 /// </summary>

05 /// <param name="topDirectoryName">壓縮文件目錄</param>

06 /// <param name="zipedFileName">壓縮包文件名</param>

07 /// <param name="compresssionLevel">壓縮級别 1-9</param>

08 /// <param name="password">密碼</param>

09 /// <param name="comment">注釋</param>

10 public static void ZipFiles(string topDirectoryName, string zipedFileName, intcompresssionLevel, string password, string comment)

11 {

12 using (ZipOutputStream zos = newZipOutputStream(File.Open(zipedFileName, FileMode.OpenOrCreate)))

13 {

14 if (compresssionLevel != 0)

15 {

16 zos.SetLevel(compresssionLevel);//設置壓縮級别

17 }

18

19 if (!string.IsNullOrEmpty(password))

20 {

21 zos.Password = password;//設置zip包加密密碼

22 }

23

24 if (!string.IsNullOrEmpty(comment))

25 {

26 zos.SetComment(comment);//設置zip包的注釋

27 }

28

29 //循環設置目錄下所有的*.jpg文件(支持子目錄搜索)

30 foreach (string file inDirectory.GetFiles(topDirectoryName, "*.jpg", SearchOption.AllDirectories))

31 {

32 if (File.Exists(file))

33 {

34 FileInfo item = new FileInfo(file);

35 FileStream fs = File.OpenRead(item.FullName);

36 byte[] buffer = new byte[fs.Length];

37 fs.Read(buffer, 0, buffer.Length);

38

39 ZipEntry entry = new ZipEntry(item.Name);

40 zos.PutNextEntry(entry);

41 zos.Write(buffer, 0, buffer.Length);

42 }

43 }

44 }

45 }

46 #endregion

解壓縮包:

01 #region 解壓縮包(将壓縮包解壓到指定目錄)

02 /// <summary>

03 /// 解壓縮包(将壓縮包解壓到指定目錄)

04 /// </summary>

05 /// <param name="zipedFileName">壓縮包名稱</param>

06 /// <param name="unZipDirectory">解壓縮目錄</param>

07 /// <param name="password">密碼</param>

08 public static void UnZipFiles(string zipedFileName, string unZipDirectory, stringpassword)

09 {

10 using (ZipInputStream zis = newZipInputStream(File.Open(zipedFileName, FileMode.OpenOrCreate)))

11 {

12 if (!string.IsNullOrEmpty(password))

13 {

14 zis.Password = password;//有加密文件的,可以設置密碼解壓

15 }

16

17 ZipEntry zipEntry;

18 while ((zipEntry = zis.GetNextEntry()) != null)

19 {

20 string directoryName = Path.GetDirectoryName(unZipDirectory);

21 string pathName = Path.GetDirectoryName(zipEntry.Name);

22 string fileName = Path.GetFileName(zipEntry.Name);

23

24 pathName = pathName.Replace(".", "$");

25 directoryName = "\\" pathName;

26

27 if (!Directory.Exists(directoryName))

28 {

29 Directory.CreateDirectory(directoryName);

30 }

31

32 if (!string.IsNullOrEmpty(fileName))

33 {

34 FileStream fs = File.Create(Path.Combine(directoryName, fileName));

35 int size = 2048;

36 byte[] bytes = new byte[2048];

37 while (true)

38 {

39 size = zis.Read(bytes, 0, bytes.Length);

40 if (size > 0)

41 {

42 fs.Write(bytes, 0, size);

43 }

44 else

45 {

46 break;

47 }

48 }

49 fs.Close();

50 }

51 }

52 }

53 }

54 #endregion

調用時我們可以這麼寫:

ZipFileUtil.ZipFiles(@"E:\\test\\", "E:\\test.zip", 1, "admin", "this is admin's comment.");//制作壓縮包

ZipFileUtil.UnZipFiles("E:\\test.zip", "E:\\guwei4037\\", "admin");//解壓縮包

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved