【问题标题】:Unexpected end of archive on a ZIP file in c#c# 中 ZIP 文件的存档意外结束
【发布时间】:2021-07-18 13:58:23
【问题描述】:

我正在尝试压缩文本文件并在控制台应用程序中将其拆分为块(字节 [])。

public List<byte[]> CreateChunks(string fileName, string txtFilePath)
    {
        long chunkSize = 100 * 1000;//100kb
        var fileChunks = new List<byte[]>();

        using (var memoryStream = new MemoryStream())
        {
            using (var zipArchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, false))
            {
                zipArchive.CreateEntryFromFile($"{txtFilePath}", fileName, CompressionLevel.Optimal);

                memoryStream.Position = 0;

                var buffer = new byte[chunkSize];

                while (memoryStream.Read(buffer, 0, buffer.Length) > 0)
                {
                    fileChunks.Add(buffer);
                }
            }
        }
        return fileChunks;
    }

使用这些块,我正在尝试在另一个应用程序中创建一个 zip 文件。

    public void JoinChunks(List<byte[]> fileChunks, string filePath)
    {
        var memory = new MemoryStream();
        using (var file = new FileStream(filePath + "\\temp.zip", FileMode.Create))
        {
            foreach (var item in fileChunks)
            {
                memory.Write(item, 0, item.Length);
            }
            memory.WriteTo(file);
            file.Close();
        }
    }

查看创建的 zip 文件时,弹出错误并显示 Unexpected end of archive

如果我尝试将一个文本文件分块并重新加入它们,那么它工作正常。问题出在 ZIP 中。欢迎任何解决方案。

【问题讨论】:

    标签: c# file memorystream ziparchive


    【解决方案1】:

    您需要先关闭存档,然后再对数据执行任何其他操作,以便存档对象可以刷新剩余数据并最终确定存档。您的代码应如下所示:

    using (var memoryStream = new MemoryStream())
    {
        using (var zipArchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, false))
        {
            zipArchive.CreateEntryFromFile($"{txtFilePath}", fileName, CompressionLevel.Optimal);
        }
    
        memoryStream.Position = 0;
    
        var buffer = new byte[chunkSize];
    
        while (memoryStream.Read(buffer, 0, buffer.Length) > 0)
        {
            fileChunks.Add(buffer);
        }
    }
    

    即将非归档相关代码移出 zipArchive 对象的 using 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      相关资源
      最近更新 更多