网上的很多示例代码都是写入文件的,自己改造了一个例子。
主要奇怪的地方是 ZipArchiveEntry open出来的stream,直接用 read 读到buff里的数据不是解压后的数据。需要有一个中介的stream流来处理。
// See https://aka.ms/new-console-template for more information
using System.IO.Compression;
var zipA = ZipFile.Open(@"R:\111.zip", ZipArchiveMode.Read);
foreach(var entity in zipA.Entries)
{
Console.WriteLine(entity.FullName);
Console.WriteLine($"{entity.Length}/{entity.CompressedLength}");
var stream = entity.Open();
var buff = new byte[entity.Length];
var ms = new MemoryStream();
stream.CopyTo(ms);
ms.Position = 0;
ms.Read(buff, 0, buff.Length);
// stream.Read(buff, 0, buff.Length); 直接对stream 读取buff,实际上应该是读到压缩后的buff内容
var fileName = @"r:\" + entity.Name;
File.WriteAllBytes(@"r:\z" + entity.Name, buff);
// entity.ExtractToFile(fileName, true);
}