Je suis à peu près sûr que ce n'est pas un double, alors patientez avec moi juste une minute.
Comment puis-je compresser par programme (C #) un fichier (sous Windows) sans utiliser de bibliothèques tierces? J'ai besoin d'un appel Windows natif ou quelque chose comme ça; Je n'aime vraiment pas l'idée de lancer un processus, mais je le ferai si je le dois absolument. Un appel PInovke serait bien mieux.
À défaut, laissez-moi vous dire ce que j'essaie vraiment d'accomplir: j'ai besoin de la possibilité de permettre à un utilisateur de télécharger une collection de documents en une seule demande. Des idées pour y parvenir?
c#
compression
zip
download
Esteban Araya
la source
la source
Réponses:
Utilisez-vous .NET 3.5? Vous pouvez utiliser la
ZipPackage
classe et les classes associées. Il ne s'agit pas simplement de compresser une liste de fichiers, car il veut un type MIME pour chaque fichier que vous ajoutez. Cela pourrait faire ce que vous voulez.J'utilise actuellement ces classes pour un problème similaire pour archiver plusieurs fichiers associés dans un seul fichier à télécharger. Nous utilisons une extension de fichier pour associer le fichier téléchargé à notre application de bureau. Un petit problème que nous avons rencontré est qu'il n'est pas possible d'utiliser simplement un outil tiers comme 7-zip pour créer les fichiers zip car le code côté client ne peut pas l'ouvrir - ZipPackage ajoute un fichier caché décrivant le type de contenu de chaque fichier de composant et ne peut pas ouvrir un fichier zip si ce fichier de type de contenu est manquant.
la source
Si vous utilisez le Framework 4.5+, il existe désormais les classes ZipArchive et ZipFile .
Vous devez ajouter des références à:
Pour .NET Core ciblant net46, vous devez ajouter des dépendances pour
Exemple project.json:
Pour .NET Core 2.0, il suffit d'ajouter une simple instruction using:
la source
J'étais dans la même situation, voulant utiliser .NET au lieu d'une bibliothèque tierce. Comme une autre affiche mentionnée ci-dessus, la simple utilisation de la classe ZipPackage (introduite dans .NET 3.5) ne suffit pas. Il y a un fichier supplémentaire qui DOIT être inclus dans l'archive pour que le ZipPackage fonctionne. Si ce fichier est ajouté, le package ZIP résultant peut être ouvert directement à partir de l'Explorateur Windows - pas de problème.
Tout ce que vous avez à faire est d'ajouter le fichier [Content_Types] .xml à la racine de l'archive avec un nœud "Par défaut" pour chaque extension de fichier que vous souhaitez inclure. Une fois ajouté, je pouvais parcourir le package à partir de l'Explorateur Windows ou décompresser et lire son contenu par programme.
Vous trouverez plus d'informations sur le fichier [Content_Types] .xml ici: http://msdn.microsoft.com/en-us/magazine/cc163372.aspx
Voici un exemple du fichier [Content_Types] .xml (doit être nommé exactement):
Et le C # pour créer un fichier ZIP:
Remarque:
la source
la source
Sur la base de la réponse de Simon McKenzie à cette question , je suggère d'utiliser une paire de méthodes comme celle-ci:
la source
On dirait que Windows pourrait vous laisser faire cela ...
Malheureusement, je ne pense pas que vous allez commencer un processus distinct à moins que vous n'utilisiez un composant tiers.
la source
Ajoutez ces 4 fonctions à votre projet:
Et utilisez-les comme ceci:
la source