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 �clair�
    Inscrit en
    Avril 2007
    Messages
    326
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    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 �clair�
    Inscrit en
    Avril 2007
    Messages
    326
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    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
    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 �clair�
    Inscrit en
    Avril 2007
    Messages
    326
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    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 �clair�
    Inscrit en
    Avril 2007
    Messages
    326
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    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
    Par d�faut
    j'ai pas de fichier catia

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

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

  9. #9
    Membre �clair�
    Inscrit en
    Avril 2007
    Messages
    326
    D�tails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    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