C# 中的 ZIP 文件意外结束存档
Unexpected end of archive on a ZIP file in c#
我正在尝试压缩一个文本文件并在控制台应用程序中将其拆分为块 (byte[])。
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 文件时,弹出错误消息 意外结束存档。
如果我尝试分块文本文件并将它们连接回去,那么它工作正常。问题出在 ZIP 中。欢迎任何解决方案。
您需要在对数据执行任何其他操作之前关闭存档,以便存档对象可以刷新剩余数据并完成存档。您的代码应如下所示:
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
语句。
我正在尝试压缩一个文本文件并在控制台应用程序中将其拆分为块 (byte[])。
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 文件时,弹出错误消息 意外结束存档。
如果我尝试分块文本文件并将它们连接回去,那么它工作正常。问题出在 ZIP 中。欢迎任何解决方案。
您需要在对数据执行任何其他操作之前关闭存档,以便存档对象可以刷新剩余数据并完成存档。您的代码应如下所示:
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
语句。