Jestem prawie pewien, że to nie jest duplikat, więc wytrzymaj ze mną przez minutę.
Jak programowo (C #) skompresować plik (w systemie Windows) bez korzystania z bibliotek innych firm? Potrzebuję natywnego wywołania systemu Windows lub czegoś takiego; Naprawdę nie podoba mi się pomysł rozpoczęcia procesu, ale zrobię to, jeśli będę musiał. Połączenie z PInovke byłoby znacznie lepsze.
Jeśli to się nie powiedzie, powiem ci, co naprawdę próbuję osiągnąć: potrzebuję możliwości, aby użytkownik mógł pobrać zbiór dokumentów w jednym żądaniu. Jakieś pomysły, jak to osiągnąć?
c#
compression
zip
download
Esteban Araya
źródło
źródło
Odpowiedzi:
Czy używasz platformy .NET 3.5? Możesz użyć
ZipPackage
klasy i klas pokrewnych. To coś więcej niż tylko spakowanie listy plików, ponieważ wymaga typu MIME dla każdego dodawanego pliku. Może zrobić, co chcesz.Obecnie używam tych klas do podobnego problemu, aby zarchiwizować kilka powiązanych plików w jednym pliku do pobrania. Używamy rozszerzenia pliku, aby powiązać pobrany plik z naszą aplikacją komputerową. Jednym małym problemem, na który natknęliśmy się, było to, że nie można po prostu użyć narzędzia innej firmy, takiego jak 7-zip, do utworzenia plików zip, ponieważ kod po stronie klienta nie może go otworzyć - ZipPackage dodaje ukryty plik opisujący typ zawartości każdego pliku składnika i nie można otworzyć pliku zip, jeśli brakuje tego pliku typu zawartości.
źródło
Jeśli używasz wersji 4.5+ Framework, są teraz klasy ZipArchive i ZipFile .
Musisz dodać odniesienia do:
W przypadku platformy .NET Core przeznaczonej dla sieci Net46 należy dodać zależności dla platformy
Przykładowy project.json:
W przypadku .NET Core 2.0 wystarczy dodać prostą instrukcję using:
źródło
Byłem w tej samej sytuacji, chciałem .NET zamiast biblioteki innej firmy. Jak na innym plakacie wspomniano powyżej, samo użycie klasy ZipPackage (wprowadzonej w .NET 3.5) nie wystarczy. Istnieje dodatkowy plik, który MUSI zostać dołączony do archiwum, aby ZipPackage działał. Po dodaniu tego pliku wynikowy pakiet ZIP można otworzyć bezpośrednio z Eksploratora Windows - nie ma problemu.
Wszystko, co musisz zrobić, to dodać plik [Content_Types] .xml do katalogu głównego archiwum z węzłem „Default” dla każdego rozszerzenia pliku, które chcesz dołączyć. Po dodaniu mogłem przeglądać pakiet z Eksploratora Windows lub programowo zdekompresować i przeczytać jego zawartość.
Więcej informacji na temat pliku [Content_Types] .xml można znaleźć tutaj: http://msdn.microsoft.com/en-us/magazine/cc163372.aspx
Oto przykład pliku [Content_Types] .xml (musi mieć dokładnie taką nazwę):
Oraz C # do tworzenia pliku ZIP:
Uwaga:
źródło
źródło
Opierając się na odpowiedzi Simona McKenziego na to pytanie , proponuję zastosować parę metod takich jak ta:
źródło
Wygląda jak Windows może po prostu pozwalają zrobić to ...
Niestety nie sądzę, abyś mógł rozpocząć oddzielny proces, chyba że przejdziesz do komponentu strony trzeciej.
źródło
Dodaj te 4 funkcje do swojego projektu:
I używaj ich w ten sposób:
źródło