将文件从 zip 存档复制到另一个而不解压缩

问题描述 投票:0回答:1

是否有任何 C# 可访问的库可以用来将压缩文件从 zip 存档复制到另一个,而无需经历解压缩和重新压缩文件的往返过程?

上次我尝试 SharpZipLib 时,我找不到一种访问压缩数据的方法,而该方法不能先“帮助”解压缩它。

c# zip
1个回答
0
投票

您可以使用 DotNetZip 库来完成此任务。

假设您有两个 zip 文件:

  • Input.zip 包含文件 a.docx、b.docx
  • Output.zip 包含文件 c.docx

如果要将a.docx文件从Input.zip复制到Output.zip,可以使用以下代码:

using System.Text;
using Ionic.Zip;

using var input = new ZipInputStream("data\\Input.zip");
using var output = new ZipOutputStream("data\\Output.zip");

while (input.GetNextEntry() is { } entry) 
{
    if (entry.FileName != "a.docx")
    {
        continue;
    }
    
    var buffer = new byte[4096];
    int size;
    output.PutNextEntry(entry.FileName);
    while ((size = input.Read(buffer, 0, buffer.Length)) > 0) 
    {
        output.Write(buffer, 0, size);
    }
}

如果遇到与编码相关的错误,您可能需要安装 System.Text.Encoding.CodePages 包。安装包后,通过添加以下代码将其注册到您的应用程序中:

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

我希望这个解决方案可以帮助你。

© www.soinside.com 2019 - 2024. All rights reserved.