Utwórz płaskie archiwum ZIP w C#

Pracując z archiwami ZIP, często napotykamy sytuacje, w których plik ZIP zawiera inne pliki ZIP, co prowadzi do zagnieżdżonej struktury. Jeśli Twoim celem jest uproszczenie tego procesu poprzez wyodrębnienie wszystkich wewnętrznych archiwów ZIP do zewnętrznego archiwum, jesteś we właściwym miejscu. W tym artykule zbadamy jak stworzyć płaskie archiwum ZIP w C# przy użyciu potężnej biblioteki Aspose.ZIP dla .NET.

Spis treści

Przegląd API .NET do tworzenia płaskich archiwów ZIP

Aby stworzyć płaskie archiwa ZIP, wykorzystamy bibliotekę Aspose.ZIP dla .NET. To solidne API do archiwizacji pozwala na tworzenie i wyodrębnianie różnych formatów archiwów, w tym ZIP, TAR, GZip i 7z. Możesz łatwo zainstalować tę bibliotekę z NuGet lub pobrać jej DLL z sekcji pobierania.

PM> Install-Package Aspose.Zip

Kroki do stworzenia płaskiego archiwum ZIP w C#

Aby lepiej zrozumieć strukturę płaskiego archiwum ZIP, rozważ następujący przykład. Na początku mamy archiwum ZIP zawierające inne archiwum ZIP:

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

Po przekształceniu tego archiwum ZIP w płaską strukturę, wszystkie wpisy z wewnętrznego ZIP będą wyodrębnione do rodzica ZIP, co doprowadzi do następującej struktury:

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

Kroki implementacji

Oto jak programowo stworzyć płaskie archiwum ZIP w C#:

  1. Załaduj archiwum ZIP rodzica: Użyj klasy Archive do załadowania archiwum ZIP rodzica.
  2. Zainicjuj listy: Utwórz listy do przechowywania:
    • Wpisów do usunięcia z archiwum ZIP rodzica
    • Wyodrębnionych wpisów i ich nazw
  3. Iteruj przez wpisy archiwum: Przejdź przez każdy ArchiveEntry w archiwum ZIP rodzica za pomocą kolekcji Archive.Entries.
  4. Przetwarzaj każdy wpis:
    • Sprawdź, czy wpis jest archiwum ZIP używając ArchiveEntry.Name.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase).
    • Jeśli tak, dodaj go do listy wpisów do usunięcia.
    • Otwórz wpis w obiekcie MemoryStream używając ArchiveEntry.Open().CopyTo(MemoryStream).
    • Iteruj przez wpisy wewnętrznego archiwum ZIP, wykonując następujące kroki:
      • Dodaj nazwę każdego wpisu do listy wpisów do dodania.
      • Załaduj każdy wpis do MemoryStream używając ArchiveEntry.Open().CopyTo(MemoryStream).
      • Dodaj wpis do listy wpisów do dodania do archiwum ZIP rodzica.
  5. Usuń wpisy wewnętrznego ZIP: Przejdź przez listę wewnętrznych archiwów ZIP i usuń każdy wpis używając metody Archive.DeleteEntry(ArchiveEntry).
  6. Dodaj nowe wpisy do archiwum ZIP rodzica: Przejdź przez listę wpisów do dodania i dodaj każdy wpis używając metody Archive.CreateEntry(String, Stream).
  7. Zapisz archiwum ZIP rodzica: Na koniec zapisz zmodyfikowane archiwum ZIP rodzica używając metody Archive.Save(String).

Oto przykład kodu demonstrujący, jak stworzyć płaskie archiwum ZIP w C#:

Uzyskaj darmową licencję API

Możesz uzyskać darmową tymczasową licencję na korzystanie z Aspose.ZIP dla .NET bez jakichkolwiek ograniczeń oceny.

Podsumowanie

W tym samouczku nauczyłeś się, jak efektywnie stworzyć płaskie archiwum ZIP przy użyciu C#. Zademonstrowaliśmy proces wyodrębniania wewnętrznych archiwów ZIP do archiwum ZIP rodzica, skutecznie unikając zagnieżdżonych folderów. Aby uzyskać więcej informacji, zapraszamy do zapoznania się z dokumentacją Aspose.ZIP dla .NET, lub skontaktuj się z nami za pośrednictwem naszego forum.

Zobacz także

Postępując zgodnie z tymi krokami, możesz łatwo wdrożyć kompresję plików ZIP w C#, zapewniając jednoarchiwum ZIP, które jest zarówno efektywne, jak i łatwe w zarządzaniu. To podejście jest najlepszym sposobem na stworzenie płaskiego ZIP w C# .NET, pozwalając Ci kompresować pliki do jednego ZIP, unikając zagnieżdżonych folderów. Niezależnie od tego, czy chcesz spakować wszystkie pliki w katalogu do jednego ZIP, czy po prostu stworzyć płaskie archiwum ZIP w C#, ten przewodnik dostarcza wszystkiego, co potrzebne do udanej implementacji.