• C#操作Zip压缩的内部文件


    1、引入程序集【Ionic.Zip】

    1. using Ionic.Zip;
    2. using System;
    3. using System.Collections.Generic;
    4. using System.IO;
    5. using System.Linq;
    6. using System.Text;
    7. using System.Xml;

    2、更新zip中的文件

    1. /// <summary>
    2. /// 更新zip中的文件
    3. /// </summary>
    4. /// <param name="baseDir">目标路径</param>
    5. /// <param name="zipName">zip文件名</param>
    6. /// <param name="fileName">新文件,用于替换zip压缩包里的同名文件</param>
    7. public static void UpdateZip(string baseDir, string zipName, string fileName)
    8. {
    9. var zipFix = Path.Combine(baseDir, zipName);
    10. using (ZipFile zip = new ZipFile(zipFix))
    11. {
    12. //更新一个文件
    13. var sourceFile = Path.Combine(baseDir, fileName);
    14. var efn = zip.EntriesSorted.First().FileName;
    15. if (efn.EndsWith("/"))
    16. {
    17. efn += fileName;
    18. }
    19. if (zip.ContainsEntry(efn))
    20. {
    21. var stream = File.OpenRead(sourceFile);
    22. var z = zip.UpdateEntry(efn, stream);
    23. z.Comment = DateTime.Now.ToString();
    24. }
    25. zip.Comment = String.Format("This zip archive was created by the CreateZip example application on machine '{0}'",
    26. System.Net.Dns.GetHostName());
    27. zip.Save();
    28. //更新后删掉新文件
    29. File.Delete(sourceFile);
    30. }
    31. }

    3、提取zip压缩包里的文件

    1. /// <summary>
    2. /// 提取zip压缩包里的文件
    3. /// </summary>
    4. /// <param name="baseDir">zip文件路径</param>
    5. /// <param name="zipName">zip文件名称</param>
    6. /// <param name="fileName">需要提取的文件的文件名称</param>
    7. public static void ExtractZipByName(string baseDir, string zipName, string fileName)
    8. {
    9. var zipFix = Path.Combine(baseDir, zipName);
    10. byte[] content = null;
    11. //转换stream为byte[]
    12. Func<Stream, byte[]> toByteArray = (stream) =>
    13. {
    14. byte[] bytes = new byte[stream.Length];
    15. stream.Read(bytes, 0, bytes.Length);
    16. //设置当前流的位置为流的开始
    17. stream.Seek(0, SeekOrigin.Begin);
    18. return bytes;
    19. };
    20. using (ZipFile zip = new ZipFile(zipFix))
    21. {
    22. //拼接相对路径
    23. var efn = zip.EntriesSorted.First().FileName;
    24. if (efn.EndsWith("/"))
    25. {
    26. efn += fileName;
    27. }
    28. if (zip.ContainsEntry(efn))
    29. {
    30. //在跟目录找
    31. var entrys = zip.SelectEntries(efn);
    32. var entry = entrys.FirstOrDefault();
    33. //将文件解压到内存流
    34. using (var stream = new MemoryStream())
    35. {
    36. entry.Extract(stream);
    37. stream.Seek(0, SeekOrigin.Begin);
    38. content = toByteArray(stream);
    39. }
    40. //在aa目录找
    41. //var entrys1 = zip.SelectEntries(fileName, "aa");
    42. //var entry1 = entrys.FirstOrDefault();
    43. }
    44. }
    45. //创建文件
    46. var extractFile = Path.Combine(baseDir, fileName);
    47. File.WriteAllBytes(extractFile, content);
    48. }

    4、读写config配置文件

    1. /// <summary>
    2. /// 读写config配置文件
    3. /// </summary>
    4. /// <param name="baseDir">提取出来的文件的文件路径</param>
    5. /// <param name="fileName">config配置文件的文件名称</param>
    6. /// <param name="softwareVersion">软件版本(配置的参数)</param>
    7. /// <param name="softwareName">软件名称(配置的参数)</param>
    8. public static void ReadWriteConfig(string baseDir, string fileName, string softwareVersion, string softwareName)
    9. {
    10. string configFile = baseDir + "\\" + fileName;
    11. //使用XML读取config文件
    12. XmlDocument xDoc = new XmlDocument();
    13. xDoc.Load(configFile);
    14. XmlNodeList nodeList = xDoc.GetElementsByTagName("setting");
    15. foreach (object obj in nodeList)
    16. {
    17. XmlNode item = (XmlNode)obj;
    18. XmlAttributeCollection xmlAttributeCollection = item.Attributes;
    19. if (xmlAttributeCollection != null)
    20. {
    21. //修改配置的值
    22. XmlAttribute att = xmlAttributeCollection["name"];
    23. if (att.Value == "SoftwareVersion")
    24. {
    25. item.SelectSingleNode("value").InnerText = softwareVersion;
    26. }
    27. if (att.Value == "SoftwareName")
    28. {
    29. item.SelectSingleNode("value").InnerText = softwareName;
    30. }
    31. }
    32. }
    33. xDoc.Save(configFile);
    34. }

  • 相关阅读:
    webpack5 splitChunks 配置和用法
    产业“上链”至深处,京东云如何作为?
    效率工具:企业微信机器人完成脚本工作-异常监控(sql篇)
    阅读芯片源码(RTL)
    新能源车提车、上牌流程
    Oracle/PLSQL: Avg Function
    TensorFlow 2.9的零零碎碎(四)-模型的输入
    cl 和 “clangtidy“分别是什么?是同一样东西吗?
    【JAVA程序设计】基于Springboot+vue教室图书馆预约管理系统
    低代码:降低技术能力要求,提升软件开发效率
  • 原文地址:https://blog.csdn.net/weixin_50478033/article/details/133202292