IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Erreur sur fusion d'archives zip


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Débutant
    Inscrit en
    février 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Débutant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : février 2007
    Messages : 108
    Points : 78
    Points
    78
    Par défaut Erreur sur fusion d'archives zip
    Bonjour à tous,

    Réalisant une application d'utilitaire pour la gestion des Ebooks au format cbz (simple zip avec changement d'extension)

    Souhaitant avoir la possibilité de fusionner plusieurs fichiers zip j'utilise le code ci-après. Celui-ci pose problème à la décompression. En effet, j'obtiens l'erreur suivante lors de la décompression : "Fin de données inattendue". Du coup les logiciel de lecture des Ebooks ne savent pas lire le fichier

    Ou se situe l'erreur dans le code. Merci pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    public ZipArchive Merge (List<ZipArchive> archives, string dir) //FIXME: probleme de fin de donnée au dézippage à regler 
    {
    if (archives == null) return null;
    if (archives.Count == 1) return archives.Single();
     
    int i = 0;
    ZipArchiveEntry nzae;
     
    using  (MemoryStream memoryStream = new MemoryStream())
    {
    using (var newarchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
    {
    foreach( ZipArchive zp in archives)
    {
    foreach ( ZipArchiveEntry zae in zp.Entries)
    {
    //if (zae.FullName.EndsWith("/") == true ) continue; //CHECK: on passe les entrée des dossiers
     
    i++;
     
    nzae = newarchive.CreateEntry(zae.FullName); //FIXME : prévoir numérotation des fichier - quid si dossier
    using (var a = zae.Open())
    using (var b = nzae.Open())
    a.CopyTo(b);
    }
    }
     
    string nf = dir + "\\fusion.cbz";
     
    using (var fileStream = new FileStream(nf, FileMode.Create))
    {
    memoryStream.Seek(0, SeekOrigin.Begin);
    memoryStream.CopyTo(fileStream);
    }
    return newarchive;
    }
    }

  2. #2
    Membre régulier
    Profil pro
    Débutant
    Inscrit en
    février 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Débutant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : février 2007
    Messages : 108
    Points : 78
    Points
    78
    Par défaut
    Bon je me réponds pour ceux qui aurais besoins du post en rencontrant le problème.

    Il suffisait de sortir le traitement du file stream du using de la l'archive parce que celle-ci doit être disposée pour pouvoir traiter entièrement le file stream.

    Voici le code final:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public ZipArchive Merge (List<ZipArchive> archives, string dir)
    		{
    			if (archives == null) return null;
    			if (archives.Count == 1) return archives.Single();
     
    			int i = 0;
    			ZipArchiveEntry nzae;
     
    			using  (MemoryStream memoryStream = new MemoryStream())
    			{
    				using (var newarchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
    				{
    					foreach( ZipArchive zp in archives)
    					{
    						foreach ( ZipArchiveEntry zae in zp.Entries)
    						{
    							string ext = System.IO.Path.GetExtension(zae.Name);
    							nzae = newarchive.CreateEntry(zae.FullName);
    							using (var a = zae.Open())
    								using (var b = nzae.Open())
    									a.CopyTo(b);
    						}
    					}
    				}
     
    				string nf = dir + "\\fusion.cbz";
     
    				using (var fileStream = new FileStream(nf, FileMode.Create))
    				{
    					memoryStream.Seek(0, SeekOrigin.Begin);
    					memoryStream.CopyTo(fileStream);
    				}
    				return null; //TODO: FIXME//new ZipArchive();
    			}
     
    		}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/02/2015, 15h58
  2. [XL-2003] Message d'erreur : "Erreur d'exécution 70" sur création d'un Zip
    Par marc75017 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/10/2011, 11h27
  3. [WS 2003] Erreur NLB cluster sur server d'archives
    Par Jean-Claude Dusse dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 30/08/2010, 11h03
  4. Erreur Archive::Zip en crontab
    Par devjcc dans le forum Modules
    Réponses: 6
    Dernier message: 01/12/2009, 22h41
  5. [Zip] Extraire une archive zip sur le serveur
    Par troxsa dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 13/03/2007, 11h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo