![](/img/trans.png)
[英]Error when creating Zip file using DotNetZip: Unexpected end of archive
[英]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.