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

VC++ .NET Discussion :

HELP ! probleme dans une fct pour compression


Sujet :

VC++ .NET

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut HELP ! probleme dans une fct pour compression
    Bonjour,
    j'ai un probleme vraiment urgent !

    voila j'utilise les deux fonctions pour compresser et decompresser des fichiers qui est dans la faq, voici les deux fct :

    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
     
    bool compresserFichier(String ^cheminSource, String ^cheminDestination)
    {
        try
        {
            // The file is placed in the FileStream
            FileStream ^ monFileStream = gcnew FileStream(cheminSource, FileMode::Open);
            cli::array<unsigned char,1> ^ monBuffer = gcnew cli::array<unsigned char>(safe_cast<int>(monFileStream->Length));
            // reading the FileStream
            monFileStream->Read(monBuffer, 0, safe_cast<int>(monFileStream->Length));
            // closing the FileStream
            monFileStream->Close();
            // Create the file which will contain the compressed file 
            monFileStream = gcnew FileStream(cheminDestination, FileMode::Create);
            // Data compression
            GZipStream ^monGZipStream = gcnew GZipStream(monFileStream, CompressionMode::Compress, false);
            // writing compressed data into the destination file 
            monGZipStream->Write(monBuffer, 0, monBuffer->Length);
            // Closing the GZipStream
            monGZipStream->Close();
            return true;
        }
        catch(Exception ^e)
        {
            Console::WriteLine(e->Message);
            return false;
        }
     }				
    bool decompression(String ^cheminSource, String ^ cheminDestination)
    {
        /*cheminSource : complete name of the compressed file
        cheminDestination : place where the file will be decompressed*/
        try
        {
            // reading the compressed file
            FileStream ^monFileStream = gcnew FileStream(cheminSource, FileMode::Open);
            // File data placed into  GZipStream
            GZipStream ^monGzipStream = gcnew GZipStream(monFileStream, CompressionMode::Decompress);
            // Array that will contain the size of the file 
            array <unsigned char> ^tailleOctets = gcnew array<unsigned char>(4);
            // get the position in the stream to get the size
            int position = safe_cast<int>(monFileStream->Length) - 4;
            monFileStream->Position = position;
            // get the file size
            monFileStream->Read(tailleOctets, 0, 4);
            // position into beginning of the stream
            monFileStream->Position = 0;
            // Converting the file size into int 
            int tailleFichier = BitConverter::ToInt32(tailleOctets, 0);
            // new size for the buffer
            array<unsigned char> ^buffer = gcnew array<unsigned char>(tailleFichier + 100);
            // Offset which permit to know its position inside the stream
            int monOffset = 0;
     
            while (true)
            {
                // Data are decompressed and put in the buffer
                int decompressionOctets = monGzipStream->Read(buffer, monOffset, 100);
                // continue until we get all the data
                if (!decompressionOctets)
                    break;
                //  incrementing the offset so we won't begin  from 0 each time...
                monOffset += decompressionOctets;
             }
     
            // creating the decompressed file
            monFileStream = gcnew FileStream(cheminDestination, FileMode::Create);
            // Writing decompressed data on the file 
            monFileStream->Write(buffer, 0, tailleFichier - 1);
            // clear data from tampon memory
            monFileStream->Flush();
            // Closing streams
            monFileStream->Close();
            monGzipStream->Close();
            return true;
        }
        catch(Exception ^e)
        {
            Console::WriteLine(e->Message);
            return false;
        }
    }
    ca marche pour les fichier .doc, .pdf cad quand je compresse et je decompresse j'arrive à lire le fichier

    mais le problème c'est que quand c'est un fichier de type xls ou catia , apres la compression et la decompression pour le fichier catia ou xls il me dit fichier corrompu
    est ce que quelqu'un peux m'aider parce que la vraiment je ne sais pas quoi faire ??

  2. #2
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    j'ai pris un fichier , il y a une difference d'un byte entre l'original et celui après decompression

    Original : Taille -> 66,7 KB (68.303 Bytes)
    Apres decompression : Taille -> 66,7 KB (68.302 Bytes)
    même les fichiers images(.emf) il me dit que c'est pas possible de voir le fichier !

  3. #3
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    je viens de retester avec un fichier .rar, ca marche nickel

    t'as un fichier qui marche pas ? que je puisse essayer ?

  4. #4
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    essaie avec un fichier .emf ou excel ou catia

    en fait j'ai changé dans le code et mtnt ca marche :

    j'ai remarqué qu'il y a un octet de difference donc j'ai changer dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     monFileStream->Write(buffer, 0, tailleFichier - 1);
    en ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     monFileStream->Write(buffer, 0, tailleFichier );
    et ca marche ...
    j'ai une autre question si je fais une encryption avec AES composée c'est à dire je crypte avec un "pass1" puis je crypte le resultat avec un "pass2" ouis je decrypte avec un "pass2" puis je decrypte avec "pass1" je recupere un fichier vide ???
    donc je suppose que c'est pas possible de faire une encryption composée ?!

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    si j encrypte 2 fois avec AES ca me donne un fichier vide ..c'est normal ?

    sinon pour l algorithme de compression tu es sur que ca marche ..t 'a testé avec un fichier ".emf"ou "xls" ou "Cpart"(Catia)?

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    j'ai pas de fichier catia

  7. #7
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    voici ci joint un exemple
    PART1222.rar

  8. #8
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    mais sinon t a essayé pour les images et excel aussi ca marche pas t a essayé?

  9. #9
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Points : 62
    Points
    62
    Par défaut
    le fichier catia tu peux pas l ouvrir non plus si t a pas le logiciel
    compresse le et decompresse et dans propriétés tu remarquera qu'il manque un octet entre l original et celui après compression et decompression

    c'est la meme chose pour tous les fichiers ..

Discussions similaires

  1. probleme sur execute_query dans une forms pour AS 10g
    Par PierrikLeGuennec dans le forum Forms
    Réponses: 4
    Dernier message: 01/07/2009, 17h12
  2. Réponses: 8
    Dernier message: 18/05/2008, 23h16
  3. Probleme dans une boucle while pour remplir une JTable
    Par sky88 dans le forum Composants
    Réponses: 3
    Dernier message: 27/03/2008, 14h01
  4. Problem de / et \ dans une apli pour la porter window / unix
    Par skad dans le forum Général Python
    Réponses: 3
    Dernier message: 26/05/2007, 09h36
  5. Probleme dans une clause like !
    Par adil dans le forum Langage SQL
    Réponses: 6
    Dernier message: 15/07/2003, 16h47

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