Seringkali, Anda mendapatkan arsip ZIP yang berisi arsip ZIP lain di dalamnya yang membentuk struktur arsip bersarang. Dalam kasus seperti itu, Anda mungkin ingin mendapatkan struktur datar dengan mengekstraksi semua arsip ZIP bagian dalam ke dalam arsip bagian luar. Untuk melakukan operasi ini secara terprogram, artikel ini menunjukkan cara membuat arsip ZIP datar di C#.

C# .NET API untuk Membuat Arsip ZIP Datar

Untuk membuat arsip ZIP datar, kita akan menggunakan Aspose.ZIP for .NET. Ini adalah API pengarsipan yang dirancang untuk membuat dan mengekstrak format arsip populer termasuk ZIP, TAR, GZip, dan 7z. Anda dapat menginstal API dari NuGet atau mengunduh DLL-nya dari bagian unduhan.

PM> Install-Package Aspose.Zip

Buat Arsip ZIP Datar di C#

Untuk memahami struktur arsip ZIP datar, mari kita ambil contoh. Berikut ini adalah arsip ZIP yang berisi arsip ZIP lain di dalamnya.

parent.zip
 ├first.txt
 ├inner.zip
 │ ├game.exe
 │ └subitem.bin
 └picture.gif

Setelah mengubah arsip ZIP ini menjadi ZIP datar, semua entri ZIP bagian dalam akan diekstrak ke dalam ZIP induk. Terakhir, kita akan mendapatkan struktur ZIP induk berikut.

flatten.zip
 ├first.txt
 ├picture.gif
 ├game.exe
 └subitem.bin

Mari kita lihat bagaimana melakukan transformasi ini secara terprogram. Berikut ini adalah langkah-langkah untuk membuat arsip ZIP datar di C#.

Contoh kode berikut menunjukkan cara membuat arsip ZIP datar di C#.

// Muat arsip ZIP
using (Archive outer = new Archive("Archives/nested-archive.zip"))
{
    // Buat daftar untuk menghapus entri ZIP dalam setelah ekstraksi
    List<ArchiveEntry> entriesToDelete = new List<ArchiveEntry>();

    // Buat daftar untuk menambahkan nama file di arsip ZIP bagian dalam
    List<string> namesToInsert = new List<string>();

    // Buat daftar untuk menambahkan objek aliran file di arsip ZIP bagian dalam
    List<MemoryStream> contentToInsert = new List<MemoryStream>();

    // Ulangi entri di ZIP induk
    foreach (ArchiveEntry entry in outer.Entries)
    {
        // Periksa apakah entri adalah file ZIP
        if (entry.Name.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase)) 
        {
            // Tambahkan entri ke daftar untuk menyimpan referensi untuk menghapusnya dari arsip nanti
            entriesToDelete.Add(entry); 

            // Buat objek aliran untuk membuka arsip ZIP
            MemoryStream innerCompressed = new MemoryStream();
            entry.Open().CopyTo(innerCompressed);

            // Muat arsip ZIP dari objek aliran 
            using (Archive inner = new Archive(innerCompressed))
            {
                // Ulangi entri arsip
                foreach (ArchiveEntry ie in inner.Entries) 
                {
                    // Simpan nama entri dalam daftar
                    namesToInsert.Add(ie.Name); 

                    // Ekstrak entri arsip ke objek aliran
                    MemoryStream content = new MemoryStream();
                    ie.Open().CopyTo(content);

                    // Tambahkan entri ke daftar
                    contentToInsert.Add(content);
                }
            }
        }
    }

    // Hapus arsip ZIP bagian dalam
    foreach (ArchiveEntry e in entriesToDelete)
        outer.DeleteEntry(e);

    // Masukkan file arsip ZIP dalam ke arsip ZIP induk
   for (int i = 0; i < namesToInsert.Count; i++)
        outer.CreateEntry(namesToInsert[i], contentToInsert[i]);

    outer.Save("Archives/flatten.zip");
}

Dapatkan Lisensi API Gratis

Anda bisa mendapatkan lisensi sementara gratis untuk menggunakan Aspose.ZIP for .NET tanpa batasan evaluasi.

Kesimpulan

Pada artikel ini, Anda telah mempelajari cara membuat arsip ZIP datar secara terprogram dalam C#. Khususnya, kami telah mendemonstrasikan cara membuat ZIP datar dengan mengekstrak arsip ZIP bagian dalam ke dalam ZIP induk. Selain itu, Anda dapat mengunjungi dokumentasi untuk membaca lebih lanjut tentang Aspose.ZIP for .NET. Selain itu, Anda dapat membagikan pertanyaan Anda kepada kami melalui forum kami.

Lihat juga