Saya mencoba membuat arsip ZIP dengan file teks demo sederhana menggunakan MemoryStream
sebagai berikut:
using (var memoryStream = new MemoryStream())
using (var archive = new ZipArchive(memoryStream , ZipArchiveMode.Create))
{
var demoFile = archive.CreateEntry("foo.txt");
using (var entryStream = demoFile.Open())
using (var streamWriter = new StreamWriter(entryStream))
{
streamWriter.Write("Bar!");
}
using (var fileStream = new FileStream(@"C:\Temp\test.zip", FileMode.Create))
{
stream.CopyTo(fileStream);
}
}
Jika saya menjalankan kode ini, file arsip itu sendiri dibuat tetapi foo.txt tidak.
Namun, jika saya mengganti MemoryStream
langsung dengan aliran file, arsip dibuat dengan benar:
using (var fileStream = new FileStream(@"C:\Temp\test.zip", FileMode.Create))
using (var archive = new ZipArchive(fileStream, FileMode.Create))
{
// ...
}
Apakah mungkin menggunakan a MemoryStream
untuk membuat arsip ZIP tanpa FileStream
?
c#
.net
zip
compression
ziparchive
Marius Schulz
sumber
sumber
using
untukentry.Open
, hanya menebak.Jawaban:
Berkat https://stackoverflow.com/a/12350106/222748 saya mendapat:
Jadi kita perlu memanggil buang di ZipArchive sebelum kita dapat menggunakannya, yang berarti melewati 'true' sebagai parameter ketiga ke ZipArchive sehingga kita masih dapat mengakses aliran setelah membuangnya.
sumber
Hanya versi zip lain tanpa menulis file apa pun.
sumber
Atur posisi aliran ke 0 sebelum menyalinnya ke aliran zip.
sumber
Solusi yang bekerja untuk MVC
sumber
Controller.File
metode memiliki kelebihan yang menerimaStream
. Gunakan itu untuk menghindari membuat salinan file ZIP lain dalam memori.Anda harus selesai menulis aliran memori kemudian membaca buffer kembali.
sumber
sumber
Ini adalah cara untuk mengkonversi entitas ke File XML dan kemudian kompres:
}
sumber
Berfungsi untuk mengembalikan aliran yang berisi file zip
Jika Anda mau, tulis zip ke file stream.
`
sumber
byteArray
dan sekali dalamZipArchive
. Belum lagi Anda tidak perlu memuat file ke memori sama sekali. Gunakan streaming, seperti yang ditunjukkan dalam semua jawaban lain yang ada.sumber