gpt4 book ai didi

c# - 如何在将文件对保持在一起的同时压缩具有最大输出大小的多个文件

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:47 25 4
gpt4 key购买 nike

我如何将文件压缩成总大小不超过一定大小的单独 zip 文件,同时将文件对放在一起?

我想使用带命令提示符的 CLI、批处理文件或一些 C# 代码来执行此操作。我不关心是否使用 DotNetZip、7Zip 或 WinZip。

示例场景是我有一个大目录 C:\LargeDirectory,25 GB。此目录包含成对出现的文件。例如 File1.pdf 和 File1.ind。这些对需要在每个 zip 文件中保持在一起。每个输出 zip 文件都需要低于 2 GB。

编辑:它们在每个输出 zip 中将是多对。如果其中一对会导致输出 zip 超过 2GB,那么它们将被拆分成另一对。

最佳答案

这里有一些 C# 代码可以根据问题中的要求完成这项工作。它将文件目录压缩成单独的 zip 文件,总大小不超过一定大小,同时将文件对放在一起。在这种情况下,它是代码中明确阐明的两种文件类型,但可以通过更多自定义使其更通用。

private void CreateZip(string largeDir, string splitIntoDir, double maxFolderSize)
{
int fileNumber = 1;
List<String> files = new List<String>(Directory.GetFiles(largeDir, "*.pdf"));
StringBuilder outputZip = new StringBuilder(splitIntoDir + Path.DirectorySeparatorChar + Path.GetFileName(largeDir) + "_" + fileNumber + @".zip");
double currentOutputSize = 0;
List<String> toAdd = new List<String>();
foreach (String file in files)
{
if(File.Exists(file) && File.Exists(file.Replace(".pdf", ".idf")))
currentOutputSize += new FileInfo(file).Length + new FileInfo(file.Replace(".pdf", ".idf")).Length;<p></p>

<pre><code> if (currentOutputSize &lt;= maxFolderSize)
{
toAdd.AddRange(new String[]{file, file.Replace(".pdf", ".idf")});

}
else
{
using (ZipFile zip = new ZipFile(outputZip.ToString()))
{
foreach(String aFile in toAdd)
zip.AddFile(aFile, "");
zip.Save();
}
toAdd.Clear();
fileNumber += 1;
outputZip.Clear();
outputZip.Append(splitIntoDir + Path.DirectorySeparatorChar + Path.GetFileName(largeDir) + "_" + fileNumber + @".zip");
currentOutputSize = new FileInfo(file).Length + new FileInfo(file.Replace(".pdf", ".idf")).Length;
toAdd.Add(file);
}
}
</code></pre>

<p>}</p>
更新:提高了算法的速度。

关于c# - 如何在将文件对保持在一起的同时压缩具有最大输出大小的多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14654296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com