Czy w programie .Net (C #) istnieje możliwość wyodrębnienia danych z pliku zip bez dekompresowania całego pliku?
Po prostu chcę wyodrębnić dane (plik) z początku pliku zip, oczywiście zależy to od tego, czy algorytm kompresji kompresuje plik w kolejności deterministycznej.
c#
compression
zip
data-compression
AwkwardCoder
źródło
źródło
Odpowiedzi:
DotNetZip jest tutaj twoim przyjacielem.
Łatwy jak:
(możesz także rozpakować do pliku lub innych miejsc docelowych).
Czytanie spisu treści pliku zip jest tak proste, jak:
Zmieniono do uwagi: DotNetZip mieszkał w Codeplex. Codeplex został zamknięty. Stare archiwum jest nadal dostępne w Codeplex . Wygląda na to, że kod został przeniesiony do Github:
źródło
Z .Net Framework 4.5 (przy użyciu ZipArchive ):
Znajdź „myfile” w zipfile i rozpakuj go.
źródło
System.IO.Compression.dll
iSystem.IO.Compression.FileSystem.dll
Coś takiego wyświetli listę i wyodrębni pliki jeden po drugim, jeśli chcesz użyć SharpZipLib:
Na podstawie tego przykładu: zawartość w pliku zip
źródło
Oto jak plik tekstowy UTF8 może być odczytany z archiwum zip do zmiennej typu string (.NET Framework 4.5 i nowsze):
źródło
Pliki ZIP zawierają spis treści. Każde narzędzie zip powinno mieć możliwość wysyłania zapytań tylko do spisu treści. Lub możesz użyć programu wiersza poleceń, takiego jak 7zip -t, aby wydrukować spis treści i przekierować go do pliku tekstowego.
źródło
W takim przypadku będziesz musiał przeanalizować lokalne wpisy nagłówka zip. Każdy plik, przechowywany w pliku zip, ma poprzedzający wpis nagłówka pliku lokalnego, który (normalnie) zawiera wystarczającą ilość informacji do dekompresji, generalnie można wykonać prostą analizę takich wpisów w strumieniu, wybrać potrzebny plik, skopiować nagłówek + skompresowane dane pliku do innego file i wywołaj unzip w tej części (jeśli nie chcesz zajmować się całym kodem lub biblioteką dekompresyjną Zip).
źródło