尝试使用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();
}

尝试使用ZipFile在指定目录中压缩不同的文件夹

通常我只使用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);
    }
}