Ionic Zip:从byte []创建Zip文件

Can*_*non 8 c# dotnetzip

Ionic zip允许我将现有文件添加到zip对象并创建一个zip文件.但考虑到我正在从创建的zip文件中读取那些byte []并通过服务器发送,我需要再次从该字节[]创建zip文件以在服务器上存储zip.我该如何实现这一目标?

我正在使用C#.

han*_*ngy 21

如果我正确理解您的问题,您byte[]通过网络获取数据阵列并希望将该数据保存在zip文件中?您可以创建一个新的ZipEntryMemoryStream你从创建byte[]你有(如显示文档):

byte[] data = MethodThatReceivesYourDataOverTheNet();
using (MemoryStream stream = new MemoryStream(data))
{
    using (ZipFile zip = new ZipFile())
    {
        zip.AddEntry("name_of_the_file_in_the_arhive.bin", "base", stream);
        zip.Save("example.zip");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • AddEntry不再提供此构造函数.允许传递流的唯一一个是AddEntry([fileName],[Stream]). (2认同)

Jon*_*eet 10

从你的问题中你不清楚你正在做什么 - 但如果你只是想避免保存到磁盘然后重新加载以获取数据,只需保存到MemoryStream:

byte[] data;
using (MemoryStream ms = new MemoryStream())
{
    zipFile.Save(ms);
    data = ms.ToArray();
}
// Do whatever with data.
Run Code Online (Sandbox Code Playgroud)

或者,使用MemoryStream.GetBuffer()以避免制作另一个副本:

byte[] buffer;
int length;
using (MemoryStream ms = new MemoryStream())
{
    zipFile.Save(ms);
    buffer = ms.ToArray();
    length = ms.Length;
}

// Now use buffer, but only up to "length"...
Run Code Online (Sandbox Code Playgroud)