Ionic zip允许我将现有文件添加到zip对象并创建一个zip文件。但考虑到我正在从创建的zip文件中读取那些byte []并通过服务器发送,我需要再次从该字节[]创建zip文件以在服务器上存储zip。我如何实现这一目标?
我正在使用C#。
答案 0 :(得分:19)
如果我正确理解您的问题,您可以通过网络获取byte[]
数据阵列,并希望将该数据保存在zip文件中?您可以根据自ZipEntry
创建的MemoryStream
创建新的byte[]
(如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");
}
}
答案 1 :(得分: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"...