System.IO: 将 zip 文件转换为 byte[] 而不保存文件

System.IO: Convert zip file to byte[] without saving file

我在使用 System.IO.Compression 库创建 zip 文件然后 return 该 zip 文件的 byte[] 时遇到问题。所以我希望该方法采用输入字符串——要压缩的文件的路径——以及文件压缩后的 return 相应字节数组。目前,我可以将 zip 文件保存到某个已知路径,然后使用 System.IO.File.ReadAllBytes(path) 获取 byte[].

但是,如果我事先不知道该 zip 文件应该在哪里结束(如果有的话),我该怎么做呢?我对解决方案的尝试如下。它似乎不起作用,因为当我尝试从字节数组重建 zip 文件时,它说存档格式未知或已损坏。注意:我已经能够使用 Ionic DotNetZip 库来做到这一点;但是,我正在尝试仅使用 System.IO 库来做同样的事情。

关于如何解决这个问题有什么想法吗?

private static byte[] CreateZipAndFindBytes(string importfile)
{
  byte[] retVal = null;

  using (System.IO.MemoryStream memStream = new System.IO.MemoryStream())
  {
    //ZipArchive(Stream, ZipArchiveMode, Boolean) //true means leave stream open
    using (System.IO.Compression.ZipArchive archive = new System.IO.Compression.ZipArchive(memStream, System.IO.Compression.ZipArchiveMode.Create, true))
    {
      archive.CreateEntryFromFile(importfile, "test.zip"); //adds the file to the zip
    }
    retVal = memStream.ToArray();
  }
  return retVal;
}

entryNameCreateEntryFromFile的第二个参数应该是"The name of the entry to create in the zip archive.",不是你的zip文件的名字。

您正在压缩导入文件,但还使用 .zip 扩展名重命名它,我假设导入文件实际上不是 zip。

改为这样做

archive.CreateEntryFromFile(importfile, importfile); //adds the file to the zip