如何将多个文件压缩到文件夹中,直到满足条件?

Posted

技术标签:

【中文标题】如何将多个文件压缩到文件夹中,直到满足条件?【英文标题】:How to zip the multiple files into the folder until condition is met? 【发布时间】:2017-05-24 19:24:39 【问题描述】:

使用的技术:C#IonicZip 库。

来自多个日志文件的列表(比如说 10,000 个,每个都有合理的大小)。我必须将这些文件压缩到一个文件夹中。但是压缩文件夹的大小必须大约在 4MB 以下。我怎样才能拥有尽可能少的压缩文件夹。

private static string ZipAndReturnFolderPath(IEnumerable<string> files, string saveToFolder)

    int listToSkip = 0;
    using (var zip = new ZipFile())
    
        do
        
            zip.AddFiles(files.Skip(listToSkip * 10).Take(10));
            zip.Save(saveToFolder);
            listToSkip++;
        
        while ((new FileInfo(saveToFolder).Length < _lessThan4MB) && totalFilesRemaining > 0);                 
    
    return saveToFolder;

在这里,为了简洁起见,我删除了几行代码。参数:files - 保存要压缩的所有剩余文件的路径(不用担心我将如何维护它)。 saveToFolder 是压缩文件夹的目的地(每次调用该函数时都是唯一的)。

我相信这行得通。我检查了它一直在压缩的文件,我发现没有重复。但是,将文件压缩到一个文件夹,检查条件,然后对已经压缩的文件夹中的接下来的几个文件再次重复相同的过程,这听起来不是一个好方法。

我做错了什么还是有什么有效的方法可以做到这一点?

【问题讨论】:

DotNetZip - Calculate final zip size before calling Save(stream) in C#的可能重复 【参考方案1】:

我认为您所追求的是answered here already,使用ZipOutputStream 可能就是您所追求的。

【讨论】:

以上是关于如何将多个文件压缩到文件夹中,直到满足条件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将包含 30 多个压缩文件的文件夹存储到 r 中的变量中

Python - 如何将多个文件夹从路径压缩到单个 zip 文件?

什么是好压?

三剑客之awk

如何将多个HDFS文件压缩为一个

如何将linux系统的多个目录及文件备份并压缩到一个文件