1、引入程序集【Ionic.Zip】
- using Ionic.Zip;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Xml;
2、更新zip中的文件
- /// <summary>
- /// 更新zip中的文件
- /// </summary>
- /// <param name="baseDir">目标路径</param>
- /// <param name="zipName">zip文件名</param>
- /// <param name="fileName">新文件,用于替换zip压缩包里的同名文件</param>
- public static void UpdateZip(string baseDir, string zipName, string fileName)
- {
- var zipFix = Path.Combine(baseDir, zipName);
-
- using (ZipFile zip = new ZipFile(zipFix))
- {
- //更新一个文件
- var sourceFile = Path.Combine(baseDir, fileName);
- var efn = zip.EntriesSorted.First().FileName;
- if (efn.EndsWith("/"))
- {
- efn += fileName;
- }
- if (zip.ContainsEntry(efn))
- {
- var stream = File.OpenRead(sourceFile);
- var z = zip.UpdateEntry(efn, stream);
- z.Comment = DateTime.Now.ToString();
- }
- zip.Comment = String.Format("This zip archive was created by the CreateZip example application on machine '{0}'",
- System.Net.Dns.GetHostName());
-
- zip.Save();
-
- //更新后删掉新文件
- File.Delete(sourceFile);
- }
- }
3、提取zip压缩包里的文件
- /// <summary>
- /// 提取zip压缩包里的文件
- /// </summary>
- /// <param name="baseDir">zip文件路径</param>
- /// <param name="zipName">zip文件名称</param>
- /// <param name="fileName">需要提取的文件的文件名称</param>
- public static void ExtractZipByName(string baseDir, string zipName, string fileName)
- {
- var zipFix = Path.Combine(baseDir, zipName);
-
- byte[] content = null;
- //转换stream为byte[]
- Func<Stream, byte[]> toByteArray = (stream) =>
- {
- byte[] bytes = new byte[stream.Length];
- stream.Read(bytes, 0, bytes.Length);
- //设置当前流的位置为流的开始
- stream.Seek(0, SeekOrigin.Begin);
- return bytes;
- };
-
- using (ZipFile zip = new ZipFile(zipFix))
- {
- //拼接相对路径
- var efn = zip.EntriesSorted.First().FileName;
- if (efn.EndsWith("/"))
- {
- efn += fileName;
- }
-
- if (zip.ContainsEntry(efn))
- {
- //在跟目录找
- var entrys = zip.SelectEntries(efn);
- var entry = entrys.FirstOrDefault();
- //将文件解压到内存流
- using (var stream = new MemoryStream())
- {
- entry.Extract(stream);
- stream.Seek(0, SeekOrigin.Begin);
- content = toByteArray(stream);
- }
-
- //在aa目录找
- //var entrys1 = zip.SelectEntries(fileName, "aa");
- //var entry1 = entrys.FirstOrDefault();
- }
- }
- //创建文件
- var extractFile = Path.Combine(baseDir, fileName);
- File.WriteAllBytes(extractFile, content);
- }
4、读写config配置文件
- /// <summary>
- /// 读写config配置文件
- /// </summary>
- /// <param name="baseDir">提取出来的文件的文件路径</param>
- /// <param name="fileName">config配置文件的文件名称</param>
- /// <param name="softwareVersion">软件版本(配置的参数)</param>
- /// <param name="softwareName">软件名称(配置的参数)</param>
- public static void ReadWriteConfig(string baseDir, string fileName, string softwareVersion, string softwareName)
- {
- string configFile = baseDir + "\\" + fileName;
-
- //使用XML读取config文件
- XmlDocument xDoc = new XmlDocument();
- xDoc.Load(configFile);
- XmlNodeList nodeList = xDoc.GetElementsByTagName("setting");
- foreach (object obj in nodeList)
- {
- XmlNode item = (XmlNode)obj;
- XmlAttributeCollection xmlAttributeCollection = item.Attributes;
- if (xmlAttributeCollection != null)
- {
- //修改配置的值
- XmlAttribute att = xmlAttributeCollection["name"];
- if (att.Value == "SoftwareVersion")
- {
- item.SelectSingleNode("value").InnerText = softwareVersion;
- }
- if (att.Value == "SoftwareName")
- {
- item.SelectSingleNode("value").InnerText = softwareName;
- }
- }
- }
- xDoc.Save(configFile);
- }