尝试看看这个:使用 System.IO. Compression 在内存中创建 ZIP 存档 https://stackoverflow.com/questions/17232414/creating-a-zip-archive-in-memory-using-system-io-compression。解决方案是这样的:
using (var memoryStream = new MemoryStream())
{
using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
var demoFile = archive.CreateEntry("foo.txt");
using (var entryStream = demoFile.Open())
using (var streamWriter = new StreamWriter(entryStream))
{
streamWriter.Write("Bar!");
}
}
using (var fileStream = new FileStream(@"C:\Temp\test.zip", FileMode.Create))
{
memoryStream.Seek(0, SeekOrigin.Begin);
memoryStream.CopyTo(fileStream);
}
}
它解释了如何在内存中创建 zip 存档,并包含另一篇有用文章的链接,该文章解释了如何使用leaveOpen参数来防止关闭流:ZipArchive 创建无效的 ZIP 文件 https://stackoverflow.com/questions/12347775/ziparchive-creates-invalid-zip-file/12350106#12350106包含这个解决方案:
using (MemoryStream zipStream = new MemoryStream())
{
using (ZipArchive zip = new ZipArchive(zipStream, ZipArchiveMode.Create, true))
{
var entry = zip.CreateEntry("test.txt");
using (StreamWriter sw = new StreamWriter(entry.Open()))
{
sw.WriteLine(
"Etiam eros nunc, hendrerit nec malesuada vitae, pretium at ligula.");
}
}
var file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync(
"test.zip",
CreationCollisionOption.ReplaceExisting);
zipStream.Position = 0;
using (Stream s = await file.OpenStreamForWriteAsync())
{
zipStream.CopyTo(s);
}
}
我希望它有帮助!
EDIT
代替zipArchiveMemoryStream.GetBuffer()
use zipArchiveMemoryStream.ToArray()