florentlejaxhe
Messages postés4Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention22 décembre 2002
-
20 déc. 2002 à 18:50
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDerniè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.
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 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 !!!
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 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 !)
cs_bgK
Messages postés131Date d'inscriptionvendredi 7 juin 2002StatutMembreDernière intervention19 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+
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 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...
cs_bgK
Messages postés131Date d'inscriptionvendredi 7 juin 2002StatutMembreDernière intervention19 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.
Toya78
Messages postés44Date d'inscriptionvendredi 1 septembre 2006StatutMembreDernière intervention23 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...
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 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...)