2016-06-08 88 views
0

我无法使用System.IO.Compression库创建zip文件,然后返回该zip文件的byte []。所以我想让该方法接受一个输入字符串 - 要压缩文件的路径 - 并且在压缩文件后返回文件的相应字节数组。目前,我可以将zip文件保存到一些已知路径,然后使用System.IO.File.ReadAllBytes(path)获取字节[]。System.IO:将zip文件转换为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; 
} 

回答

0

entryNameCreateEntryFromFile第二个参数应该是“于zip存档创建条目的名称。”这不是你的zip文件的名字。

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

做到这一点,而不是

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

感谢。这解决了问题。 – Porter

+0

你知道这是否可以工作,如果该方法需要一个目录作为输入?据我所知,CreateEntryFromFile在给定目录而不是文件时不起作用 – Porter

+0

@Porter是否有一个名为“CreateEntryFromDirectory”的方法? –

相关问题