63 lines
2.1 KiB
C#

using CalendarNotepad.Models;
using System.IO.Compression;
using System.Text;
namespace CalendarNotepad.Extends
{
/// <summary>
/// 压缩文件帮助类
/// </summary>
public static class ZipExtend
{
/// <summary>
/// 压缩文件名
/// </summary>
public static string ZipFileName { get; set; } = AppConfig.GetSaveFileName;
/// <summary>
/// 某个文件保存到压缩文件内
/// </summary>
/// <param name="str">内容</param>
/// <param name="entryName">压缩文件内容文件名</param>
public static void SaveToFile(string str,string entryName) {
using var fs = new FileStream(ZipFileName,FileMode.OpenOrCreate);
using var archive = new ZipArchive(fs,ZipArchiveMode.Create);
var entry = archive.CreateEntry(entryName);
using var es = entry.Open();
using var sw = new StreamWriter(es,Encoding.UTF8);
sw.Write(str);
sw.Flush();
}
/// <summary>
/// 读取压缩文件中文件内容
/// </summary>
/// <param name="entryName">压缩文件内容文件名</param>
/// <returns>内容</returns>
public static string GetFormFile(string entryName) {
if(!File.Exists(ZipFileName)) {
ZipFile.Open(ZipFileName,ZipArchiveMode.Create).Dispose();
return "";
}
using var zipfile = ZipFile.OpenRead(ZipFileName);
var entry = zipfile.GetEntry(entryName);
if(entry == null) {
return "";
}
var st = entry.Open();
var sr = new StreamReader(st,Encoding.UTF8);
var str = sr.ReadToEnd();
return str;
}
/// <summary>
/// 获取压缩库中所有文件名
/// </summary>
/// <returns>文件名列表</returns>
public static IEnumerable<string> GetFiles() {
using var zipfile = ZipFile.OpenRead(ZipFileName);
foreach(var en in zipfile.Entries) {
yield return en.Name;
}
}
}
}