簡體   English   中英

c# 中 ZIP 文件的存檔意外結束

[英]Unexpected end of archive on a ZIP file in c#

我正在嘗試 zip 一個文本文件並將其拆分為控制台應用程序中的塊(字節 [])。

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 中。 任何解決方案都是最受歡迎的。

在對數據執行任何其他操作之前,您需要關閉存檔,以便存檔 object 可以刷新剩余數據並完成存檔。 您的代碼應如下所示:

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 object 的using語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM