Comment créer ZipArchive à partir de fichiers en mémoire en C #?
Est en quelque sorte possible de créer un ZipArchive à partir du fichier(s) dans la mémoire (et non pas sur le disque).
Suivant est le cas d'utilisation:
Plusieurs fichiers sont reçus dans un IEnumerable<HttpPostedFileBase>
variable. Je veux zip tous ces fichiers à l'aide de ZipArchive
. Le problème est que ZipArchive
permet seulement CreateEntryFromFile
, qui s'attend à un chemin d'accès au fichier, où, comme je viens de le fichiers dans la mémoire.
Question:
Est-il possible d'utiliser un "stream" pour créer le "entrée" dans ZipArchive
, de sorte que je peux directement mettre dans le fichier contenu dans le zip?
Je ne veux pas d'abord enregistrer les fichiers, créer le zip (à partir de fichiers enregistrés les chemins d'accès), puis supprimer les fichiers individuels.
Ici, attachmentFiles
est IEnumerable<HttpPostedFileBase>
using (var ms = new MemoryStream())
{
using (var zipArchive = new ZipArchive(ms, ZipArchiveMode.Create, true))
{
foreach (var attachment in attachmentFiles)
{
zipArchive.CreateEntryFromFile(Path.GetFullPath(attachment.FileName), Path.GetFileName(attachment.FileName),
CompressionLevel.Fastest);
}
}
...
}
source d'informationauteur Flair
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez le faire, à l'aide de la ZipArchive.CreateEntry méthode, comme @AngeloReis souligné dans les commentaires, et décrit ici pour un problème un peu différent.
Votre code devrait ressembler à ceci:
Tout d'abord merci @Alex pour la réponse parfaite.
Aussi pour le scénario, vous avez besoin de lire à partir de systèmes de fichiers :
avec l'aide de
System.IO.Compression.ZipFileExtensions