Comment puis-je créer des archives 7-Zip à partir de mon application console C #? J'ai besoin de pouvoir extraire les archives en utilisant le programme 7-Zip standard et largement disponible .
Voici mes résultats avec les exemples fournis en réponse à cette question
- "Shelling out" à 7z.exe - c'est l'approche la plus simple et la plus efficace, et je peux confirmer que cela fonctionne bien . Comme le mentionne workmad3 , je dois juste garantir que 7z.exe est installé sur toutes les machines cibles, ce que je peux garantir.
- 7Zip en compression mémoire - cela fait référence à la compression des cookies "en mémoire" avant l'envoi au client; cette méthode semble assez prometteuse. Les méthodes de wrapper (encapsulant le SDK LZMA ) retournent le type
byte[]
. Lorsque j'écris lebyte[]
tableau dans un fichier, je ne peux pas l'extraire en utilisant 7-Zip (File.7z is not supported archive
). - 7zSharp Wrapper (trouvé sur CodePlex) - cela englobe le SDK 7z exe / LZMA . J'ai référencé le projet à partir de mon application et il a créé avec succès des fichiers d'archive, mais je n'ai pas pu extraire les fichiers à l'aide du programme 7-Zip (
File.7z is not supported archive
). - 7Zip SDK aka LZMA SDK - Je suppose que je ne suis pas assez intelligent pour comprendre comment l'utiliser (c'est pourquoi j'ai posté ici) ... Tous les exemples de code de travail qui démontrent la création d'une archive 7zip qui peut être extraite par le programme 7zip régulier?
- Interface CodeProject C # (.NET) pour les DLL d'archives 7-Zip - prend uniquement en charge l'extraction des archives 7zip ... J'ai besoin de les créer!
- SharpZipLib - Selon leur FAQ , SharpZipLib ne prend pas en charge 7zip.
c#
.net
compression
7zip
Seibar
la source
la source
Réponses:
Si vous pouvez garantir que l'application 7-zip sera installée (et dans le chemin) sur toutes les machines cibles, vous pouvez décharger en appelant l'application de ligne de commande 7z. Ce n'est pas la solution la plus élégante mais c'est le moins de travail.
la source
Exemple de cookie EggCafe 7Zip Voici un exemple (cookie zipping) avec la DLL de 7Zip.
CodePlex Wrapper Il s'agit d'un projet open source qui déforme la fonction zipping de 7z.
7Zip SDK Le SDK officiel pour 7zip (C, C ++, C #, Java) <--- Ma suggestion
Bibliothèque zip .Net par SharpDevelop.net
Exemple de CodeProject avec 7zip
SharpZipLib Beaucoup de zips
la source
SevenZipSharp est une autre solution. Crée des archives 7-zip ...
la source
Voici un exemple de travail complet utilisant le SDK SevenZip en C #.
Il écrira et lira les fichiers 7zip standard créés par l'application Windows 7zip.
PS. L'exemple précédent n'allait jamais décompresser car il n'a jamais écrit les informations de propriété requises au début du fichier.
la source
J'ai utilisé le sdk.
par exemple:
la source
Installez simplement 7 zip à partir de la source et passez le paramètre à la méthode.
Merci. Veuillez aimer la réponse.
la source
J'utilise ce code
la source
Installez le package NuGet appelé
SevenZipSharp.Interop
Ensuite:
la source
Quelques informations de test supplémentaires sur le code @Orwellophile utilisant un fichier texte de 17,9 Mo.
L'utilisation des valeurs de propriété dans l'exemple de code "tel quel" aura un impact négatif ÉNORME sur les performances, cela prend 14,16 secondes .
En définissant les propriétés comme suit, effectuez le même travail à 3,91 s (par exemple, l'archive aura les mêmes informations sur le conteneur, à savoir: vous pouvez extraire et tester l'archive avec 7zip mais il n'y a pas d'informations sur le nom de fichier)
7zip natif 2 sec.
J'ai fait un autre test en utilisant 7zip natif et un fichier de sauvegarde SQL de 1,2 Go (.bak)
7zip (compression maximale): 1 minute
LZMA SDK (@Orwellophile avec le paramètre de propriété ci-dessus): 12:26 min :-(
Outputfile à peu près la même taille .
Je suppose donc que je vais moi-même utiliser une solution basée sur le moteur c / c ++, soit appeler l'exécutable 7zip à partir de c # ou utiliser squid-box / SevenZipSharp , qui est un wrapper autour du fichier dll 7zip c / c ++, et semble être le tout dernier fork de SevenZipSharp. Je n'ai pas testé le wrapper, mais j'espère qu'il fonctionne exactement comme le 7zip natif. Mais j'espère que cela donnera également la possibilité de compresser le flux, ce que vous ne pouvez évidemment pas si vous appelez directement l'exe. Sinon, je suppose qu'il n'y a pas d'avantage à appeler l'exe. L'encapsuleur a quelques dépendances supplémentaires donc il ne rendra pas votre projet publié "plus propre".
Au fait, il semble que l'équipe .Net Core envisage d'implémenter LZMA dans la classe system.io dans .Core ver. 5, ce serait génial!
(Je sais que c'est une sorte de commentaire et non une réponse, mais pour pouvoir fournir l'extrait de code, cela ne peut pas être un commentaire)
la source
Le moyen le plus simple est de travailler avec des fichiers .zip au lieu de .7z et d'utiliser Dot Net Zip
Lors de la rotation des commandes 7zip pour shell, il y a d'autres problèmes tels que les privilèges utilisateur, j'ai eu un problème avec SevenZipSharp.
la source
SharpCompress est à mon avis l'une des bibliothèques de compression les plus intelligentes. Il prend en charge LZMA (7-zip), est facile à utiliser et en développement actif.
Comme il prend déjà en charge le streaming LZMA, au moment de l'écriture, il ne prend malheureusement en charge que la lecture d'archives 7-zip. MAIS l'écriture d'archive est sur leur liste de tâches (voir readme). Pour les futurs lecteurs: vérifiez le statut actuel ici: https://github.com/adamhathcock/sharpcompress/blob/master/FORMATS.md
la source