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

时间:2016-06-08 18:26:57

标签: c# .net visual-studio zip .net-4.5

我在使用System.IO.Compression库创建zip文件然后返回该zip文件的byte []时遇到问题。所以我希望该方法获取一个输入字符串 - 要压缩文件的路径 - 并在压缩文件后返回相应的字节数组。目前,我可以将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;
}

1 个答案:

答案 0 :(得分:0)

entryNameCreateEntryFromFile的第二个参数应该是"要在zip存档中创建的条目的名称。" 它& #39;不是您的zip文件的名称。

您正在压缩导入文件,但也使用.zip扩展名对其进行重命名,我假设导入文件实际上不是拉链。

改为执行此操作

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