6
DotNetZipを使用して、メモリ文字列を含むzipアーカイブを作成し、次のコードで添付ファイルとしてダウンロードします。SharpZipLibメモリ内の文字列を含むアーカイブを作成し、添付ファイルとしてダウンロードします。
私はSharpZipLibでこれを行う必要があります。どうしたらいいですか? SharpZipLibはファイルをバイト配列として追加できますか?
DotNetZipを使用して、メモリ文字列を含むzipアーカイブを作成し、次のコードで添付ファイルとしてダウンロードします。SharpZipLibメモリ内の文字列を含むアーカイブを作成し、添付ファイルとしてダウンロードします。
私はSharpZipLibでこれを行う必要があります。どうしたらいいですか? SharpZipLibはファイルをバイト配列として追加できますか?
は
MemoryStream msFormXml = new MemoryStream(UTF8Encoding.Default.GetBytes("<form><pkg>Test1</pkg></form>"));
MemoryStream msFormHTML = new MemoryStream(UTF8Encoding.Default.GetBytes("<html><body>Test2</body></html>"));
MemoryStream outputMemStream = new MemoryStream();
ZipOutputStream zipStream = new ZipOutputStream(outputMemStream);
zipStream.SetLevel(3); //0-9, 9 being the highest level of compression
ZipEntry xmlEntry = new ZipEntry("Form.xml");
xmlEntry.DateTime = DateTime.Now;
zipStream.PutNextEntry(xmlEntry);
StreamUtils.Copy(msFormXml, zipStream, new byte[4096]);
zipStream.CloseEntry();
ZipEntry htmlEntry = new ZipEntry("Form.html");
htmlEntry.DateTime = DateTime.Now;
zipStream.PutNextEntry(htmlEntry);
StreamUtils.Copy(msFormHTML, zipStream, new byte[4096]);
zipStream.CloseEntry();
zipStream.IsStreamOwner = false;
zipStream.Close();
outputMemStream.Position = 0;
byte[] byteArray = outputMemStream.ToArray();
Response.Clear();
Response.AppendHeader("Content-Disposition", "attachment; filename=FormsPackage.zip");
Response.AppendHeader("Content-Length", byteArray.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(byteArray);
感謝の下に試してみてください。これはうまくいった! – Dimuthu
要求が完了してダウンロードが完了したら、メモリは解放されますか?私も非常に似たようなことをやっていますし、たくさんのファイルがあるかもしれません。要求が完了した後にメモリをクリアする必要があります。私はガベージコレクターがそれを世話するだろうと確信していますが、私は100%確実ではありません。 – harsimranb
ガベージコレクタがそれを行うと仮定します。しかし、 "MemoryStream"のようなデータ型の場合、メモリが解放されることを保証するためにDispose()を呼び出すか、または "using"ステートメントを使用する必要があります。 –