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 :

zippage de données en c# avec zlib.net


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2007
    Messages : 76
    Par défaut zippage de données en c# avec zlib.net
    Beaucoup d'entre vous qui se sont intéressés au zippage ont surement du développer avec Zlib, qui est notamment utilisée en VB, C++ ...
    En C#, on peut utiliser d'autres librairies, cependant, aucune ne m'a permis d'arriver à mes fins: je dois dézipper un byte[] (contenant du xml mais là n'est pas la question) et je souhaite pour cela utiliser la librairie zlib.net qui est une sorte d'adaptation de zlib pour le c# , quelques fonctions en moins (compress, decompress)... j'aimerais donc savoir si vous pourriez m'aider à dézipper mon tabbleau d'octets à l'aide de la méthode inflate, car il n'y a pas de documentation à proprement parler de zlib.net!

    ça fait deux journées de 8 heures que je passe dessus, aussi je vous serais très reconaissant si vous pouviez m'aider!
    merci d'avance

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Et pourquoi tu n'utilise pas plutot la #ziplib ? un aventage certain est que google regorge de turoriaux pour l'utiliser ...

  3. #3
    Membre confirmé
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2007
    Messages : 76
    Par défaut
    Je l'ai déjà testée mais ça n'avais pas fonctionné, je m'étais cassé les dents dessus.
    Finalement j'ai réussi a faire fonctionner zlib.net, donc merci quand même pour la réponse!

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    using System;
    using System.Collections.Generic;
    using System.Text;
    using ICSharpCode.SharpZipLib.Zip;
    using System.IO;
     
    namespace TDLinkerToToolsTests
    {
        static class DeZipper
        {
            static private string StrPathFichier = "";
     
            static private void InitDeZipper(string StrFiles)
            {
                StrPathFichier = StrFiles;
            }
     
            // Fonction Compression
            // Action : Compresse un fichier donné en fichier zip
            // Entrée : intLvlZip : niveau de compression (de 1 mini à 9 max )
            // Entrée : strExt : Extension après la compression (pas obligatoirement .zip donc).
            //                Exemple : .crz, .zip, .etc
            // Sortie : un booléen pour savoir si ça a marché
            static public bool Compression(int intLvlZip, string strExt, string StrFiles)
            {
                InitDeZipper(StrFiles);
     
                bool BolReussi = false; // on initialise la méthode de cryptage à faux
                try
                {
                    // declaration des variables
                    string StrCheminZip;
                    int IntSize = 4096;                      // taille du tampon
                    byte[] data = new byte[4096]; // tampon qui stockera 4096bytes d'info à chaque fois
     
                    if (intLvlZip < 1)  // on vérifie si c pas un chiffre trop faible pour la compression
                        intLvlZip = 1;
                    if (intLvlZip > 9)  // on vérifie si c pas un chiffre trop fort pour la compression
                        intLvlZip = 9;
     
                    // on va crée le chemin du fichier zip qui va être généré
                    StrCheminZip = Path.GetDirectoryName(StrPathFichier) + "\\" + (Path.GetFileNameWithoutExtension(StrPathFichier)) + strExt;
                    ZipOutputStream MyZipOutputStream = new ZipOutputStream(File.Create(StrCheminZip));    // création du fichier zip vide
                    MyZipOutputStream.SetLevel(intLvlZip); // Niveau de compression de 0 (faible) à 9 (fort)
                    FileStream fs = File.OpenRead(StrPathFichier); // lecture du fichier non compréssé
                    ZipEntry theEntry = new ZipEntry(Path.GetFileName(StrPathFichier));  // prends le nom que du fichier en creant le zip
                    MyZipOutputStream.PutNextEntry(theEntry);      // on selectionne le fichier à l'interieur du zip
     
                    while (IntSize > 0)                // on lit le fichier jusqu'à la fin par bloc de 4096 bytes
                    {
                        IntSize = fs.Read(data, 0, IntSize);
                        if (IntSize > 0)
                        {
                            MyZipOutputStream.Write(data, 0, IntSize);
                        }
                    }
     
                    MyZipOutputStream.Finish(); // on ferme le flux zip
                    MyZipOutputStream.Close();  // on ferme le flux zip
                    fs.Close();                        // on ferme le flux d'écriture
                    BolReussi = true; // on met la variable sur réussi
                    return BolReussi;
                }
                catch
                {
                    return BolReussi;
                }
            }
     
     
            // Fonction Décompression
            // Action : Décompresse avec l'algo zip
            // Entrée : rien
            // Sortie : un booléen pour savoir si ça a marché
     
            static public bool Decompression(string StrFiles)
            {
                InitDeZipper(StrFiles);
     
                string StrCheminFichier;
                int IntSize = 4096;                      // taille du tampon
                byte[] data = new byte[4096];
                bool BolReussi = false; // on initialise la méthode de cryptage à faux
                try
                {
                    ZipInputStream MyZipInStream = new ZipInputStream(File.OpenRead(StrPathFichier));
                    ZipEntry theEntry;
                    theEntry = MyZipInStream.GetNextEntry();
                    //StrCheminFichier = Path.GetDirectoryName(StrPathFichier) + "\\" + theEntry.Name;    // on prend le chemin du zip et on prend le nom du fichier compressé
                    FileStream fsFichierDezip = null; //= new FileStream(StrCheminFichier, FileMode.Create); // on crée le fichier à décompresser (donc d'abord vide)
                    while (theEntry != null)                 // tant qu'on travaille sur un fichier
                    {
                        StrCheminFichier = Path.GetDirectoryName(StrPathFichier) + "\\" + theEntry.Name;    // on prend le chemin du zip et on prend le nom du fichier compressé
                        fsFichierDezip = new FileStream(StrCheminFichier, FileMode.Create);
                        data = new byte[4096];
                        while ((IntSize = MyZipInStream.Read(data, 0, IntSize)) > 0)
                        {
                            fsFichierDezip.Write(data, 0, IntSize);
                        }
                        fsFichierDezip.Flush();
                        fsFichierDezip.Close();
                        theEntry = MyZipInStream.GetNextEntry();
                        IntSize = 4096;
                    }
                    MyZipInStream.Close();  // On ferme le flux de lecture du zip
                    fsFichierDezip.Close();
                    BolReussi = true; // on met la variable sur réussi
                    return BolReussi;
                }
                catch
                {
                    return BolReussi;
                }
            }
        }
    }
    Normalement la décompression fonctionne, que ton archive soit composé d'1 ou d'x fichier(s).
    Comme c'est du code pris sur différent site, et que je n'avais pas besoin de la compression je n'ai testé (et débuggé) que la décompression.

    Mais la décompression au départ fonctionnais (mais n'était pas multifichier) donc je pense que la compression devrait marcher (peut être monofichier, je n'ai pas vérifié).

    C'est fait en utilisant SharpZipLib.
    C'est peut être loin de ce que tu veux faire, mais c'est un exemple.

    Edit :
    En relisant je vois qu'il reste plein de chose moche, mais si vous aviez vu le code de départ ... Coder comme un pourchot !!!!
    Nan mais il y avais des déclaration de variable dans une boucle !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Et affecter à IntSize la valeur d'une fonction a qui on passe en paramètre IntSize, forcement qu'après cela faut réinitialiser IntSize à 4096, sinon cela ne marche plus ... Et il ne l'avasi aps mis !!!! J'aurais du passer à la fonction 4096 lors du débogage.

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Tu as aussi ce code pour zipper des fichiers avec cette lib:

    http://morpheus.ftp-developpez.com/s...et/ZipFile.zip

    Bon, c'est très vieux mais ca doit encore marcher

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2007
    Messages : 5
    Par défaut
    Citation Envoyé par Ykk_Jeff Voir le message
    Je l'ai déjà testée mais ça n'avais pas fonctionné, je m'étais cassé les dents dessus.
    Finalement j'ai réussi a faire fonctionner zlib.net, donc merci quand même pour la réponse!
    Peux tu nous dire comment tu as fait ?
    Parce que moi aussi je me casse le dents !

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/04/2010, 13h38
  2. Réponses: 3
    Dernier message: 28/01/2010, 14h22
  3. connexion à une base de données avec vb.Net
    Par Ange_1987 dans le forum VB.NET
    Réponses: 1
    Dernier message: 22/02/2009, 13h42
  4. Réponses: 4
    Dernier message: 26/11/2008, 13h59
  5. Insertion de données dans une BDD Oracle avec VB.NET
    Par DashRendar dans le forum Accès aux données
    Réponses: 7
    Dernier message: 23/01/2008, 08h47

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