Mencipta Arkib ZIP dalam Memori Menggunakan System.IO.Compression: Mengatasi Ralat ZIP Tidak Sah
Apabila cuba mencipta arkib ZIP dalam memori menggunakan MemoryStream, anda mungkin menghadapi isu di mana arkib dicipta tetapi kekurangan kandungan yang diingini. Isu ini timbul kerana keperluan untuk menulis bait akhir, seperti jumlah semak, ke arkib untuk melengkapkannya.
Untuk menyelesaikannya, anda boleh menggunakan kod diubah suai berikut:
using (var memoryStream = new MemoryStream()) { using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) { 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)) { memoryStream.Seek(0, SeekOrigin.Begin); memoryStream.CopyTo(fileStream); } }
Perbezaan utama di sini ialah parameter ketiga dalam pembina ZipArchive, yang ditetapkan kepada benar. Parameter ini menunjukkan bahawa ZipArchive boleh dilupuskan tanpa menutup aliran asas. Ini membolehkan anda menggunakan semula MemoryStream selepas membuat arkib.
Dengan menggunakan kod yang diubah suai, anda boleh berjaya mencipta arkib ZIP dalam ingatan dengan kandungan yang dikehendaki, walaupun semasa menggunakan MemoryStream. Fleksibiliti ini membolehkan anda memanipulasi arkib dalam pelbagai senario tanpa memerlukan pengendalian fail perantaraan.
Atas ialah kandungan terperinci Bagaimana untuk Berjaya Membuat Arkib ZIP Dalam Memori Menggunakan C# dan Elakkan Ralat 'ZIP Tidak Sah'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!