8

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

我正在使用 C#。

4

2 回答 2

22

如果我正确理解您的问题,您会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");
    }
}
于 2012-03-24T22:34:40.240 回答
10

从您的问题中并不清楚您在做什么 - 但如果您只是想避免保存到磁盘然后重新加载以获取数据,只需保存到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"...
于 2012-03-24T21:21:06.630 回答