使用DotNetZip压缩与解压缩

下载地址:http://dotnetzip.codeplex.com/

 

解压后找到\\DotNetZipLib-DevKit-v1.9\zip-v1.9\Release下的Ionic.Zip.dll文件拷贝到C盘下

 

接着打开Visual Studio Command Prompt (2010),然后定位到C盘根目录,依次输入gacutil -i Ionic.Zip.dll 和regasm Ionic.Zip.dll ,然后拷贝C盘下的这个Ionic.Zip.dll到您的应用程序中,添加引用即可!代码例子如下:

[csharp] view plaincopy

 

01.using System;  

02.using System.Collections.Generic;  

03.using System.ComponentModel;  

04.using System.Data;  

05.using System.Drawing;  

06.using System.Linq;  

07.using System.Text;  

08.using System.Windows.Forms;  

09.using Ionic.Zip;  

10.namespace WindowsFormsZIP  

11.{  

12.    public partial class Form1 : Form  

13.    {  

14.        public Form1()  

15.        {  

16.            InitializeComponent();  

17.        }  

18.  

19.        /// <summary>  

20.        /// 压缩带中文的文件名.  

21.        /// </summary>  

22.        /// <param name="sender">The source of the event.</param>  

23.        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>  

24.        private void button1_Click(object sender, EventArgs e)  

25.        {  

26.  

27.            using (ZipFile zip = new ZipFile("苏志.zip",Encoding.Default))  

28.            {  

29.                zip.AddFile("数据库文档.doc");  

30.                zip.Save();  

31.            }  

32.  

33.        }  

34.  

35.        /// <summary>  

36.        /// 用密码加密ZIP文件.  

37.        /// </summary>  

38.        /// <param name="sender">The source of the event.</param>  

39.        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>  

40.        private void button2_Click(object sender, EventArgs e)  

41.        {  

42.  

43.            using (ZipFile zip = new ZipFile())  

44.            {  

45.                zip.Password = "123456!";  

46.                zip.AddFile("WPF 4 Unleashed.pdf");  

47.                zip.Save("WPF 4 Unleashed.zip");  

48.            }  

49.  

50.        }  

51.  

52.        /// <summary>  

53.        /// 压缩文件夹  

54.        /// </summary>  

55.        /// <param name="sender">The source of the event.</param>  

56.        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>  

57.        private void button3_Click(object sender, EventArgs e)  

58.        {  

59.            using (ZipFile zip = new ZipFile())  

60.            {  

61.                zip.AddDirectory(@"E:\suzhi");  

62.                zip.Comment = "This zip was created at " + System.DateTime.Now.ToString("G");  

63.                zip.Save("test.zip");  

64.            }  

65.        }  

66.  

67.        /// <summary>  

68.        /// 抽取ZIP中的文件到指定的文件夹.  

69.        /// </summary>  

70.        /// <param name="sender">The source of the event.</param>  

71.        /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>  

72.        private void button4_Click(object sender, EventArgs e)  

73.        {  

74.            using (ZipFile zip = ZipFile.Read("test.zip"))  

75.            {  

76.                foreach (ZipEntry z in zip)  

77.                {  

78.                    z.Extract(@"F:\kk");  

79.                }  

80.            }  

81.  

82.        }  

83.  

84.    }  

85.}  


具体的例子:

//获取压缩包路径

            string filename = material.CreationTime.ToyyyyMMdd().Replace("-", "");



            //string zippath = AppDomain.CurrentDomain.BaseDirectory + "upload\\Zipped\\" + filename;

            //和上面的结果一样

            string zippath = material.FilePath;

            string decomPath = "";

            string nowpath = "";

            if (material.FilePath.Substring(material.FilePath.Length - 3, 3).Equals("zip"))

            { decomPath = material.FilePath.Replace(".zip", ""); }

            if (material.FilePath.Substring(material.FilePath.Length - 3, 3).Equals("rar"))

            { decomPath = material.FilePath.Replace(".rar", ""); }

            //查询此目录下是否存在需要解压过的同名的文件夹名称

            DirectoryInfo direInfo = new DirectoryInfo(decomPath);

            if (direInfo.Exists)

            {

                DirectoryInfo[] childs = direInfo.GetDirectories();

                foreach (DirectoryInfo child in childs)

                {

                    child.Delete(true);

                }

                direInfo.Delete(true);

            }



            //解压文件夹

            using (ZipFile zip = ZipFile.Read(zippath))

            {



                foreach (ZipEntry z in zip)

                {

                    //z.Extract(material.FilePath.Replace(".zip", ""));

                    z.Extract(zippath.Replace(".zip", ""));

                }

            }



            direInfo = new DirectoryInfo(zippath.Replace(".zip", ""));

            if (direInfo.Exists)

            {

                DirectoryInfo[] dirchild = direInfo.GetDirectories();

                if (dirchild.Count() == 1)

                {

                     nowpath = decomPath + "\\" + dirchild[0].Name;

                    direInfo = new DirectoryInfo(nowpath);

                    DirectoryInfo[] dirchild2 = direInfo.GetDirectories();

                    foreach (DirectoryInfo childrens in dirchild2)

                    {



                        //修改文件夹的内容

                        FileStream fs = new FileStream(nowpath +"\\"+ childrens.Name + "\\index.html", FileMode.OpenOrCreate, FileAccess.ReadWrite);

                        string fileText = "";

                        GameServer server = GameServerService.GetGameServerWithGame(materialLog.ServerId);

                        Game game = server.Game;

                        using (StreamReader sr = new StreamReader(fs))

                        {

                            fileText = sr.ReadToEnd();

                            fileText = fileText.Replace("#GameCode#", game.Code);

                            fileText = fileText.Replace("#ServerCode#", server.Code);

                            fileText = fileText.Replace("#ServerId#", Convert.ToString(server.ServerId));

                        }

                        if (fileText != "")

                        {

                            using (StreamWriter sw = new StreamWriter(nowpath + "\\" + childrens.Name + "\\index.html", false, Encoding.Default))

                            {

                                sw.Write(fileText);

                            }

                        }



                    }

                }

                

            }



            //重新压缩



            using (ZipFile zip = new ZipFile())

            {

                zip.AddDirectory(decomPath);

                zip.Save(nowpath+".zip");

            }

 

 

你可能感兴趣的:(zip)