我使用DotNetZip将MemoryStream
中的文件添加到zip文件中,然后将该zip文件保存为MemoryStream
,以便我可以将其作为附件发送。下面的代码没有错误,但MemoryStream
一定不能正确完成,因为它是不可读的。当我将拉链保存到我的硬盘驱动器时,一切都很完美,而不是当我尝试将它保存到流中时。
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
}
答案 0 :(得分:13)
好的,我想出了我的问题,实际上非常愚蠢。谢谢大家的帮助!
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();
答案 1 :(得分:8)
我已经复制了您的代码,然后将最终的内存流保存为data.txt
。这对我来说完全不可读,但后来我意识到它不是一个文本文件,它是一个zip文件,所以我把它保存为data.zip
并且按预期工作
我用来将ms保存到磁盘的方法如下(紧跟在zip.Save(ms);
行之后)
ms.Position = 0;
byte[] data = ms.ToArray();
File.WriteAllBytes("data.zip", data);
所以,我相信你的内存流是应该的,它是压缩文本。在解压缩之前它是不可读的。