在内存中创建zip作为byte []而不保存到磁盘?

时间:2016-08-18 16:12:11

标签: c# zip

这是我使用的GZipStream,但支持部门要我使用Zip而不是GZip因为Windows不支持GZip,客户不知道如何打开它。

基本上我所拥有的是内存中的PDF字节并将其附加到电子邮件中。

所以,我不得不将其转换为Zip,但却无法这样做。我试过ZipArchive但它需要磁盘。我尝试了Deflate,但最后得到了0个字节。

那么,你们做了什么让它发挥作用?

    [Original]
    public static byte[] CompressFile(byte[] parmRawBytes)
    {
        using (var memoryStream = new MemoryStream())
        {
            using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Compress))
            {
                gzipStream.Write(parmRawBytes.ToArray(), 0, parmRawBytes.ToArray().Length);
            }

            return memoryStream.ToArray();
        }
    }

    [New]
    public static byte[] CompressFile(byte[] parmRawBytes)
    {
        using (var sourceMemoryStream = new MemoryStream(parmRawBytes))
        {
            sourceMemoryStream.Position = 0;  //Reset memory-stream pointer...

            using (var targetMemoryStream = new MemoryStream())
            {
                //using (var zipArchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, false))
                //{
                //    var zipArchiveEntry = zipArchive.CreateEntry("foo.pdf");
                //
                //    using (var stream = zipArchiveEntry.Open())
                //    {
                //        memoryStream.CopyTo(stream);
                //    }
                //}
                using (var deflateStream = new DeflateStream(sourceMemoryStream, CompressionMode.Compress))
                {
                    targetMemoryStream.CopyTo(deflateStream);
                }

                return targetMemoryStream.ToArray();
            }
        }
    }

0 个答案:

没有答案