Compression

florentlejaxhe Messages postés 4 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 22 décembre 2002 - 20 déc. 2002 à 18:50
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 - 22 oct. 2006 à 18:22
Je suis nouveau dans la programmation Dephi 6 et ai développé un logiciel de cryptage. Je désire lui adjoindre la compression du fichier grâce à la librairie Zlib de Delphi. Comment utilise-t-on cette librairie concrètement ? Merci.

9 réponses

cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
21 déc. 2002 à 13:25
Salut !!

Pour la décompression, comme tu pourras le voir dans les commentaires du source, je suis plutôt au stade 0, et je n'ai pas eu le temps de vraiment y regarder de plus près... Un jour, peut-être !!!

Bonne prog' !
Bestiol.
0
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
21 déc. 2002 à 23:21
Tu sais, avant de faire un prog, je teste d'abord les fonctions principales de manière "toute bête"... Et, malheureusement, la décompression n'est pas aussi simple (meeer*eee encore !) que la compression...

Je promet que je vais y bosser !! (de toute façon, je vais finir par ne plus en avoir le choix !)

@+
Bestiol.
0
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
22 déc. 2002 à 01:00
Je n'ai malheureusement pas de doc... désolé !!
si tu en trouve, laisse l'adresse ici !

Bonne prog' !
Bestiol.
0
cs_bgK Messages postés 131 Date d'inscription vendredi 7 juin 2002 Statut Membre Dernière intervention 19 janvier 2004
22 déc. 2002 à 10:28
Voilà un petit peu de code pour la décompression. Il ne faut pas oublier de mettre la taille une fois décompressé à l'emplacement prévu à cet effet. Je ne sais pas comment détecter la taille décompressé à partir des données compressées ...

var
Input, Output: TFileStream;
DCprsStream: TDecompressionStream;
begin

Try
Input := TFileStream.Create(edSource.Text, fmOpenRead);
Output := TFileStream.Create(edDest.Text, fmCreate);
DCprsStream := TDeCompressionStream.Create(Input);
{Création des trois streams nécessaires à la décompression... Le
TDeCompressionStream prend comme paramètre pour Create le stream compressé
à décompresser}

DCprsStream.OnProgress := Progression; //Assignation de la procédure gérant
//la progression de la compression

Output.CopyFrom(DCprsStream, {Insérer ici la taille du fichier une fois décompressé});
//On copie à partir du stream qui a ouvert le fichier source dans le
//fichier de destination en passant par le TDeCompressionStream, qui va
//décompresser les données...

Finally
DCprsStream.Free;
Input.Free; //Libération de la mémoire...
Output.Free;
Prgrs.Position := 0;
end;
end;

a+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
22 déc. 2002 à 15:17
c'est là qu'était mon erreur !! (comme tu me l'a précisé)... J'ai juste à ajouter que pour récupérer la taille du fichier décompressé, il "suffit" de créer une entête dans le fichier lors de la compression...

Merci bgK, et bonne prog' !
Bestiol.
0
Toya78 Messages postés 44 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 23 août 2008
22 oct. 2006 à 10:38
Hello tout le monde.

Heu c'est peut-être idiot mais pourquoi ne pas mettre :
Output.CopyFrom(DCprsStream, 0) ?

Mettre 0 ça permet de se placer au début du stream et le copier intégralement :/.

J'essaie dès que j'ai le temps ! :)
0
cs_bgK Messages postés 131 Date d'inscription vendredi 7 juin 2002 Statut Membre Dernière intervention 19 janvier 2004
22 oct. 2006 à 17:40
Outch un magnifique déterrage de topic :) 2002, pas mal !

Hum, si j'en crois mes restes de Delphi, le 2ème paramètre de TStream.CopyFrom indique la taille des données à copier. Un 0 indique de tout copier.
Donc, il faut quand même se placer au début du stream.

++
0
Toya78 Messages postés 44 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 23 août 2008
22 oct. 2006 à 18:18
héhé joli déterrage hein lol

Heu oui se placer au début. Le 0 le fait tout seul. Ca permettrait juste d'éviter d'avoir à chercher la taille des données décompressées. Enfin il me semble...
0
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
22 oct. 2006 à 18:22
Tu l'as dit, ça c'est un déterrage :op

Salut bgK, au passage !!! :op
(ça fait un bail :os)

Pour te répondre Toya, et ce sera comme pour bgK, avec ce qu'il me reste de souvenirs à ce sujet :
Le 0 permet effectivement de se placer au début et de tout copier, mais je pense qu'il faut tout de même fournir la taille totale du fichier décompressé. Je pense qu'en interne, le TDecompressionStream en a besoin.

Mais bon comme ça fait un moment que j'ai pas touché à la zLib je me trompe peut-être, et ça ne coûte rien de tester ! (mais je pense qu'avant que bgK trouve la solution qu'il avait publiée, j'avais déjà esayé ça...)

vala vala, bonne prog' !
Bestiol.
http://olance.developpez.com
0
Rejoignez-nous