using ICSharpCode.SharpZipLib.Zip;
namespace MindExportLearning.Util
{
/// <summary>
/// 压缩和解压文件
/// </summary>
public class ZipUtil
{
/// <summary>
/// 内存压缩多个文件
/// </summary>
/// <param name="memoryFiles">文件信息(包括目录和文件内容)</param>
/// <param name="zipedFileName">压缩路径</param>
public static void ZipMemoryFiles(Dictionary<string, byte[]> memoryFiles, string zipedFileName)
{
using (FileStream zipFile = File.Create(zipedFileName))
{
using (var zipStream = new ZipOutputStream(zipFile))
{
foreach (var memoryFile in memoryFiles)
{
//文件
var entry = new ZipEntry(memoryFile.Key);
zipStream.PutNextEntry(entry);
zipStream.Write(memoryFile.Value, 0, memoryFile.Value.Length);
}
}
zipFile.Close();
}
}
调用实例:
var memoryFiles = new Dictionary<string, byte[]>
{
{"content.xml", FileHelper.XmlToBytes(GetContent(source))},
{"meta.xml", FileHelper.XmlToBytes(GetMeta())},
{"Revisions\\746128402a05\\revisions.xml", FileHelper.XmlToBytes(GetRevision(source))},
{"Revisions\\746128402a05\\rev-1-1502240545.xml", FileHelper.XmlToBytes(GetRev(source))},
{ "META-INF\\manifest.xml", FileHelper.XmlToBytes(GetManifest(source))}
};
ZipUtil.ZipMemoryFiles(memoryFiles, zipPath);
filehelper 文件帮助类:
/// <summary>
/// 读写文件帮助类
/// </summary>
public class FileHelper
{
/// <summary>
/// 写入文件JSON字符串
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="value">文件内容</param>
public static void WriteJson(string path, string value)
{
using (var fs = new FileStream(path, FileMode.Append))
{
var sw = new StreamWriter(fs);
sw.Write(value);
sw.Close();
}
}
/// <summary>
/// 写入文件对象
/// </summary>
/// <param name="path">文件路径</param>
/// <param name="value">对象数据类型</param>
public static void WriteJson(string path, object value)
{
var json = JsonConvert.SerializeObject(value);
WriteJson(path, json);
}
/// <summary>
/// 创建文件夹
/// </summary>
/// <param name="filePath"></param>
public static void CreateFolder(string filePath)
{
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
}
/// <summary>
/// 删除文件
/// </summary>
/// <param name="filePath">要删除的文件路径</param>
public static void DeleteFile(string filePath)
{
if (!string.IsNullOrEmpty(filePath)&& File.Exists(filePath))
File.Delete(filePath);
}
/// <summary>
/// 删除文件夹
/// </summary>
/// <param name="folderPath">要删除的非空目录</param>
public static void DeleteFolder(string folderPath)
{
if (!string.IsNullOrEmpty(folderPath)&& Directory.Exists(folderPath))
{
var di = new DirectoryInfo(folderPath);
//true表示删除里面所有文件包括文件夹和子文件夹
di.Delete(true);
}
}
/// <summary>
/// 重命名文件夹内的所有子文件夹
/// </summary>
/// <param name="directoryName">文件夹名称</param>
/// <param name="newDirectoryName">新子文件夹名称格式字符串</param>
public void RenameDirectories(string directoryName, string newDirectoryName)
{
int i = 1;
string[] sDirectories = Directory.GetDirectories(directoryName);
foreach (string sDirectory in sDirectories)
{
string sNewDirectoryName = string.Format(newDirectoryName, i++);
string sNewDirectory = Path.Combine(directoryName, sNewDirectoryName);
Directory.Move(sDirectory, sNewDirectory);
}
}
public static MemoryStream XmlToStream(XmlDocument xml)
{
var stream = new MemoryStream();
xml.Save(stream);
return stream;
}
public static byte[] StreamToBytes(MemoryStream stream)
{
return stream.ToArray();
}
public static byte[] XmlToBytes(XmlDocument xml)
{
var stream = XmlToStream(xml);
return StreamToBytes(stream);
}
}