使用SharpZipLib压缩多个文件,并将其放入字符串中

本文关键字:字符串 压缩 SharpZipLib 文件 使用 | 更新日期: 2023-09-27 18:27:38

我一直使用SharpZipLib在我的ASP.NET应用程序中创建zip文件,我发现它是一个非常好的库。然而,在web应用程序中,我总是使用http响应(Response.OutputStream)的OutPutStream作为zip文件的流,它直接将zip文件传递给用户。

现在我需要创建一个zip"文件",但我需要将其作为方法的字符串返回值发送,而不是将其发送到Response.OutputStream。但是,我试图保存的zip文件总是损坏的。最后一步,对于以这种格式获得的其他zip文件,转换字符串并保存为zip文件的流程是正确的,因此错误必须在下面显示的方法中:

MemoryStream outputMemoryStream = new MemoryStream();
ZipOutputStream zipOutputStream = new ZipOutputStream(outputMemoryStream);
zipOutputStream.SetLevel(3);
Encoding isoEncoding = Encoding.GetEncoding(28591);
int nfiles = 10;
for (var fileId=0; i<nfiles;i++)
{
  using (var inputMemoryStream = new MemoryStream())
  {
    inputMemoryStream.Position = 0;
    string fileContent = GetFileContent(fileId);
    inputMemoryStream.Write(isoEncoding.GetBytes(fileContent), 0, filecontent.Length);
    var newEntry = new ZipEntry("file_" + fileId + ".xml");
    newEntry.DateTime = DateTime.Now;
    zipOutputStream.PutNextEntry(newEntry);
    inputMemoryStream.Position = 0;
    StreamUtils.Copy(inputMemoryStream, zipOutputStream, new byte[4096]);
    zipOutputStream.CloseEntry(); 
  }
}
zipOutputStream.IsStreamOwner = false;
zipOutputStream.Finish();
zipOutputStream.Close();
zipOutputStream.Dispose();
outputMemoryStream.Position = 0;
var sr = new StreamReader(ms);
string zipFileString = sr.ReadToEnd();
return zipFileString;

使用SharpZipLib压缩多个文件,并将其放入字符串中

尝试使用Base64将byte[]转换为编码字符串。

转换.ToBase64String(byte[])和Convert.FromBase64String(byte[])就可以了。