10

我正在使用 DotNetZip 将文件从 a 添加MemoryStream到 zip 文件,然后将该 zip 保存为 a MemoryStream,以便我可以将其作为附件通过电子邮件发送。下面的代码没有错误,但MemoryStream不能正确完成,因为它不可读。当我将 zip 保存到硬盘驱动器时,一切正常,只是当我尝试将其保存到流时却不行。

using (ZipFile zip = new ZipFile())
{
var memStream = new MemoryStream();
var streamWriter = new StreamWriter(memStream);

streamWriter.WriteLine(stringContent);

streamWriter.Flush();      
memStream.Seek(0, SeekOrigin.Begin);

ZipEntry e = zip.AddEntry("test.txt", memStream);
e.Password = "123456!";
e.Encryption = EncryptionAlgorithm.WinZipAes256;

var ms = new MemoryStream();
ms.Seek(0, SeekOrigin.Begin);

zip.Save(ms);

//ms is what I want to use to send as an attachment in an email                                   
}
4

2 回答 2

14

好的,我发现了我的问题,实际上很愚蠢。感谢大家的帮助!

ZipEntry e = zip.AddEntry("test.txt", memStream);
e.Password = "123456!";
e.Encryption = EncryptionAlgorithm.WinZipAes256;

//zip.Save("C:\\Test\\Test.zip");

//Stream outStream;

var ms = new MemoryStream();

zip.Save(ms);

    //--Needed to add the following 2 lines to make it work----
ms.Seek(0, SeekOrigin.Begin);
ms.Flush();
于 2012-06-28T18:10:24.603 回答
9

我已经复制了您的代码,然后将您的最终记忆流以data.txt. 它对我来说完全不可读,但后来我意识到它不是一个文本文件,它是一个 zip 文件,所以我将它保存为data.zip它并按预期工作

我用来将 ms 保存到磁盘的方法如下(紧接在您的zip.Save(ms);行之后)

            ms.Position = 0;
            byte[] data = ms.ToArray();
            File.WriteAllBytes("data.zip", data);

所以,我相信你的记忆流是它应该是的,它是压缩文本。直到你解压它才可读。

于 2012-06-28T16:12:51.330 回答