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

8
Ionic zip可以让我将现有文件添加到zip对象中并创建一个zip文件。但是考虑到我正在从创建的zip文件中读取那些byte[]并将其发送到服务器,我需要再次从该byte[]创建zip文件以将zip存储在服务器上。我该如何实现这一点?
我使用的是C#。
2个回答

24
如果我正确理解您的问题,您通过网络获取了byte[]数据数组,并想将该数据保存在zip文件中?您可以从您获得的 byte[] 创建一个MemoryStream,然后从该流创建一个新的ZipEntry(如文档所示:docs):
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");
    }
}

3
AddEntry不再提供该构造函数。现在唯一允许传递流的是AddEntry([fileName], [Stream])。 - JRodd

11

从您的问题中并不太清楚您在做什么,但如果您只是想避免将数据保存到磁盘然后重新加载,只需将其保存到MemoryStream中:

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

或者,使用 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"...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接