10

DotNetZipを使用して、MemoryStreamからzipファイルにファイルを追加し、そのzipをとして保存し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て期待通りに動作しました。

zip.Save(ms);私がmsをディスクに保存するために使用した方法は次のとおりです(あなたの行の直後)

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

ですから、あなたのメモリストリームは、圧縮されたテキストであると想定されているものだと思います。解凍するまで読めません。

于 2012-06-28T16:12:51.330 に答える