Comment compresser un fichier en C#, à l'aide de pas de 3ème partie Api?
Je suis sûr que ce n'est pas un doublon alors pardonnez-moi juste une minute.
Comment puis-je par programmation (C#) ZIP un fichier (sous Windows) sans l'aide d'un tiers des bibliothèques? J'ai besoin d'un natif de windows appel ou quelque chose comme ça; je n'aime vraiment pas l'idée de départ d'un processus, mais je le ferai si je dois absolument. Un PInovke appel serait beaucoup mieux.
À défaut, permettez-moi de vous dire ce que j'essaye vraiment de le réaliser: j'ai besoin de la capacité de permettre à l'utilisateur de télécharger une collection de documents en une seule requête. Aucune idée sur la façon d'accomplir cette?
- Compresser des fichiers Zip avec Windows Shell API et C#
- téléchargement à partir d'une page web?
- Oui, à partir d'une page ASPX.
- J'ai trouvé cet exemple utile lorsque j'étais à la recherche de la même chose il y a quelques semaines: syntaxwarriors.com/2012/...
- Si vous utilisez les 4,5 Cadre, il est maintenant le ZipArchive et ZipFile classes.
- Quiconque a l'habitude de DotNetZip??
- Pure Classe C# pour Stocker les Fichiers en Zip (sous licence MIT)
Vous devez vous connecter pour publier un commentaire.
Êtes-vous à l'aide .NET 3.5? Vous pouvez utiliser le
ZipPackage
classe et les classes associées. Son plus que juste la compression d'un fichier de la liste parce qu'il veut un type MIME pour chaque fichier que vous ajoutez. Il pourrait faire ce que vous voulez.Je suis en train d'utiliser ces classes pour un problème similaire à archiver plusieurs fichiers en un seul fichier pour le téléchargement. Nous utilisons une extension de fichier à associer le fichier téléchargé avec notre application de bureau. Un petit problème que nous avons rencontré a été que ce n'est pas possible de simplement utiliser un outil tiers comme 7-zip pour créer les fichiers zip, parce que du côté client, le code 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 type de contenu du fichier est manquant.
Si l'aide de l'4.5+ Cadre, il est maintenant le ZipArchive et ZipFile classes.
Vous avez besoin d'ajouter des références à:
Pour .NET de Base ciblage net46, vous devez ajouter des dépendances pour
Exemple de projet.json:
Pour .NET Core 2.0, juste l'ajout d'une simple instruction d'utilisation est tout ce qui est nécessaire:
ZipFile.CreateFromDirectory(filesDirectory, zipFileName)
peut être utilisé pour compresser un répertoire entierJ'ai été dans la même situation, de le vouloir .NET au lieu d'un tiers de la bibliothèque. Comme une autre affiche mentionné ci-dessus, simplement à l'aide de la ZipPackage classe (introduit en .NET 3.5) n'est pas assez. Il y a un fichier supplémentaire qui DOIT être inclus dans l'archive pour que le ZipPackage de travail. Si ce fichier est ajouté, alors la résultante ZIP package peut être ouvert directement à partir de l'Explorateur Windows - pas de problème.
Tout ce que vous avez à faire est d'ajouter le [Content_Types].fichier xml à la racine de l'archive avec un "Défaut" nœud pour chaque extension de fichier que vous souhaitez inclure. Une fois ajouté, j'ai pu parcourir le package à partir de l'Explorateur Windows ou par programmation de décompresser et lire son contenu.
Plus d'informations sur le [Content_Types].fichier xml peut être trouvé ici: http://msdn.microsoft.com/en-us/magazine/cc163372.aspx
Voici un échantillon de la [Content_Types].xml (doit être nommé exactement) fichier:
Et le C# pour la création d'un fichier ZIP:
Remarque:
Basé sur Simon McKenzie réponse à cette question, je suggérerais à l'aide d'une paire de méthodes comme ceci:
Ressemble à Windows peut juste vous laisser faire cette...
Malheureusement, je ne pense pas que vous allez obtenir autour du lancement d'un processus distinct, sauf si vous allez à un tiers de la composante.
Ajouter ces 4 fonctions de votre projet:
Et de les utiliser comme ceci: