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配置文件文章来源:https://uudwc.com/A/k93pv
/// <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);
}
文章来源地址https://uudwc.com/A/k93pv