尝试使用ZipFile在指定目录中压缩不同的文件夹
本文关键字:压缩 文件夹 ZipFile | 更新日期: 2023-09-27 17:55:05
我发现下面的代码堆栈溢出,我尝试过,但不知道如何充分使用它。
基本上,我希望能够使用foreach循环分别压缩所有文件,但我不会有文件的列表,因为它们每次都在变化。
那么我怎么能得到一个列表的文件夹/目录在根目录到一个数组?
public static void CreateZipFile(string fileName, IEnumerable<string> files)
{
var zip = ZipFile.Open(fileName, ZipArchiveMode.Create);
foreach (var file in files)
{
zip.CreateEntryFromFile(file, Path.GetFileName(file), CompressionLevel.Optimal);
}
zip.Dispose();
}
通常我只使用DotNetZip
这段代码:
using (var file = new ZipFile(zipName))
{
file.AddFiles(fileNames, directoryPathInArchive);
file.Save();
}
其中zipName
为要创建的zip文件名称,fileNames
为要放入的文件名称
你需要一个小脚本
public static class ZipUtil
{
public static void CreateFromMultifleFolders(string targetZip, string[] foldersSrc, string[] fileSrc = null, CompressionLevel compressionLevel = CompressionLevel.Fastest)
{
if (File.Exists(targetZip))
File.Delete(targetZip);
using (ZipArchive archive = ZipFile.Open(targetZip, ZipArchiveMode.Create))
{
foreach (string dir in foldersSrc)
AddFolederToZip(dir, archive, Path.GetFileName(dir), compressionLevel);
if(fileSrc != null)
foreach (string file in fileSrc)
archive.CreateEntryFromFile(file, Path.GetFileName(file), compressionLevel);
}
}
private static void AddFolederToZip(string folder, ZipArchive archive, string srcPath, CompressionLevel compressionLevel)
{
srcPath += "/";
foreach (string dir in Directory.GetDirectories(folder))
AddFolederToZip(dir, archive, srcPath + Path.GetFileName(dir), compressionLevel);
foreach (string file in Directory.GetFiles(folder))
archive.CreateEntryFromFile(file, srcPath + Path.GetFileName(file), compressionLevel);
}
}