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 :

Décompresser une archive avec des sous répertoires


Sujet :

C#

  1. #1
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    726
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 726
    Points : 266
    Points
    266
    Par défaut Décompresser une archive avec des sous répertoires
    J'ai essayé l'exemple de code suivant se basant sur la librairie CSharpZipLib.
    Seulement il ne fonctionne pas lorsque l'archive contient des sous dossiers

    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
    38
    39
     
     
        public static bool lblnDecompressionFichier(string lstrArchive, string lstrRepertoireDestination)
            {
                try
                {
                    ZipInputStream zipIStream = new ZipInputStream(File.OpenRead(lstrArchive));
                    ZipEntry theEntry;
     
                    while ((theEntry = zipIStream.GetNextEntry()) != null)
                    {
                        System.Console.WriteLine("File " + theEntry.Name);
     
                        if (theEntry.IsDirectory)
     
                            Directory.CreateDirectory(lstrRepertoireDestination + theEntry.Name);
                        else
                        {
                            int size = 2048;
                            byte[] data = new byte[size];
                            FileStream fs = new FileStream(lstrRepertoireDestination + theEntry.Name, FileMode.Create);
     
                            while ((size = zipIStream.Read(data, 0, data.Length)) > 0)
                            {
                                fs.Write(data, 0, size);
                            }
                            fs.Flush();
                            fs.Close();
                        }
                    }
                    zipIStream.Close();
                    return true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Erreur : " + ex.Message);
                    return false;
                }
            }
    J'explique cela par le fait que la méthode "GetNextEntry" ne récupère pas les répertoires ...
    Comment faire alors ?

    merci

  2. #2
    Membre averti

    Inscrit en
    Septembre 2004
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 105
    Points : 339
    Points
    339
    Par défaut
    J'utilise le code suivant qui marche sans problème:
    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
            public static void ExtractZipFile(Stream fileStream, string destination)
            {
                using (var zipStream = new ZipInputStream(fileStream))
                {
                    ZipEntry zipContentFile;
                    while ((zipContentFile = zipStream.GetNextEntry()) != null)
                        ExtractFile(zipStream, zipContentFile, destination);
                }
            }
     
            private static void ExtractFile(Stream zipStream, ZipEntry zipContentFile, string destination)
            {
                string zipFileName = Path.GetFileName(zipContentFile.Name).Trim();
                if (zipFileName.Length == 0)
                    return;
                string uniqueFilepath = Path.Combine(destination, zipContentFile.Name);
                var directory = Path.GetDirectoryName(uniqueFilepath);
                Directory.CreateDirectory(directory);
     
                using (var streamWriter = File.Create(uniqueFilepath))
                {
                    var data = new byte[8*1024];
                    while (true)
                    {
                        var size = zipStream.Read(data, 0, data.Length);
                        if (size > 0)
                            streamWriter.Write(data, 0, size);
                        else
                            break;
                    }
                }
            }

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

Discussions similaires

  1. Impossible de décompresser une archive .tar.gz sous Centos
    Par georgie2 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 18/05/2015, 17h45
  2. [PR-2013] durée reelle d'une tache avec des sous-taches
    Par potcho dans le forum Project
    Réponses: 1
    Dernier message: 18/05/2015, 12h56
  3. Lier une ligne avec des sous lignes
    Par souhail72 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 03/12/2013, 10h08
  4. Créer une archive avec une partie des sous-répertoires
    Par sclinard dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 21/07/2010, 11h07
  5. fichier .bat : problèmes avec des sous-répertoires
    Par aymron dans le forum Windows
    Réponses: 4
    Dernier message: 23/06/2005, 09h33

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