Genellikle, arşivlerin iç içe yapısını oluşturan diğer ZIP arşivlerini içeren bir ZIP arşivi alırsınız. Bu gibi durumlarda tüm iç ZIP arşivlerini dış arşive çıkartarak düz bir yapı elde etmek isteyebilirsiniz. Bu işlemi programlı olarak gerçekleştirmek için bu makale, C# dilinde düz bir ZIP arşivinin nasıl oluşturulacağını gösterir.

Düz ZIP Arşivleri Oluşturmak için C# .NET API

Düz ZIP arşivlerini oluşturmak için Aspose.ZIP for .NET kullanacağız. ZIP, TAR, GZip ve 7z gibi popüler arşiv formatlarını oluşturmak ve ayıklamak için tasarlanmış bir arşivleme API’sidir. API’yi NuGet’ten yükleyebilir veya DLL’sini indirilenler bölümünden indirebilirsiniz.

PM> Install-Package Aspose.Zip

C# ile Düz ZIP Arşivi Oluşturma

Düz bir ZIP arşivinin yapısını anlamak için bir örnek verelim. Aşağıdaki, içinde başka bir ZIP arşivi içeren bir ZIP arşividir.

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

Bu ZIP arşivini düz bir ZIP’e dönüştürdükten sonra, iç ZIP’in tüm girişleri ana ZIP’e çıkarılacaktır. Son olarak, ana ZIP’in aşağıdaki yapısını elde edeceğiz.

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

Bu dönüşümü programlı olarak nasıl gerçekleştireceğimizi görelim. Aşağıda, C# dilinde düz bir ZIP arşivi oluşturma adımları yer almaktadır.

  • İlk olarak, Archive sınıfını kullanarak ana ZIP arşivini yükleyin.
  • Ardından, üst ZIP’ten silinecek iç ZIP girişlerini, ayıklanan girişleri ve adlarını depolamak için listeler oluşturun.
  • Bundan sonra, Archive.Entries koleksiyonunu kullanarak üst ZIP’deki her ArchiveEntry arasında geçiş yapın.
  • Her giriş için aşağıdaki işlemleri gerçekleştirin:
  • Ardından, dahili ZIP arşivleri listesinde dolaşın ve Archive.DeleteEntry(ArchiveEntry) yöntemini kullanarak her girişi silin.
  • Ana ZIP’e eklenecek girişler listesinde dolaşın ve her girişi Archive.CreateEntry(String, Stream) yöntemini kullanarak ekleyin.
  • Son olarak, Archive.Save(String) yöntemini kullanarak ana ZIP arşivini kaydedin.

Aşağıdaki kod örneği, C# dilinde düz bir ZIP arşivinin nasıl oluşturulacağını gösterir.

// ZIP arşivini yükle
using (Archive outer = new Archive("Archives/nested-archive.zip"))
{
    // Ayıklamadan sonra dahili ZIP girişlerini silmek için bir liste oluşturun
    List<ArchiveEntry> entriesToDelete = new List<ArchiveEntry>();

    // Dahili ZIP arşivlerindeki dosyaların adlarını eklemek için bir liste oluşturun
    List<string> namesToInsert = new List<string>();

    // Dosyaların akış nesnelerini dahili ZIP arşivlerine eklemek için bir liste oluşturun
    List<MemoryStream> contentToInsert = new List<MemoryStream>();

    // Üst ZIP'deki girişler arasında geçiş yapın
    foreach (ArchiveEntry entry in outer.Entries)
    {
        // Girişin bir ZIP dosyası olup olmadığını kontrol edin
        if (entry.Name.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase)) 
        {
            // Daha sonra arşivden kaldırmak üzere referansı tutmak için listeye giriş ekleyin
            entriesToDelete.Add(entry); 

            // ZIP arşivini açmak için akış nesnesi oluşturun
            MemoryStream innerCompressed = new MemoryStream();
            entry.Open().CopyTo(innerCompressed);

            // Akış nesnesinden ZIP arşivini yükleyin 
            using (Archive inner = new Archive(innerCompressed))
            {
                // Arşiv girişleri üzerinde döngü
                foreach (ArchiveEntry ie in inner.Entries) 
                {
                    // Girişin adını listede tut
                    namesToInsert.Add(ie.Name); 

                    // Arşiv girişini bir akış nesnesine çıkarın
                    MemoryStream content = new MemoryStream();
                    ie.Open().CopyTo(content);

                    // Listeye giriş ekle
                    contentToInsert.Add(content);
                }
            }
        }
    }

    // Dahili ZIP arşivlerini silin
    foreach (ArchiveEntry e in entriesToDelete)
        outer.DeleteEntry(e);

    // Dahili ZIP arşivlerinin dosyalarını ana ZIP arşivine ekleyin
   for (int i = 0; i < namesToInsert.Count; i++)
        outer.CreateEntry(namesToInsert[i], contentToInsert[i]);

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

Ücretsiz API Lisansı Alın

Aspose.ZIP for .NET’i değerlendirme sınırlamaları olmaksızın kullanmak için ücretsiz bir geçici lisans alabilirsiniz.

Çözüm

Bu makalede, C# dilinde programlı olarak düz bir ZIP arşivi oluşturmayı öğrendiniz. Özellikle, iç ZIP arşivlerini ana ZIP’e çıkararak düz bir ZIP’in nasıl yapıldığını gösterdik. Bunun dışında, Aspose.ZIP for .NET hakkında daha fazla bilgi edinmek için belgeleri ziyaret edebilirsiniz. Ayrıca, sorularınızı [forumumuz] aracılığıyla bizimle paylaşabilirsiniz]16.

Ayrıca bakınız