ARCHIVAGE EN AUTOEXTRACTIBLE (SELF-EXTRACTOR) AVEC COMPRESSION
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 2005
-
23 mars 2003 à 16:54
Gogo700
Messages postés31Date d'inscriptionmardi 31 août 2010StatutMembreDernière intervention15 mars 2013
-
1 nov. 2010 à 20:08
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Gogo700
Messages postés31Date d'inscriptionmardi 31 août 2010StatutMembreDernière intervention15 mars 2013 1 nov. 2010 à 20:08
Moi aussi, même question que SP2308
sp2308
Messages postés13Date d'inscriptionvendredi 28 décembre 2007StatutMembreDernière intervention14 avril 2013 19 mars 2010 à 00:30
Bonjour
Je decouvre cet archiveur et j essaie de le comprendre. Certe il est detaillé mais je suis debutant ...
Toutefois je n ai pas trouvé le chemin de l icone... Alors ma question est idiote mais ne porte que sur l icone de l'archive crée.est il possible de mettre sa propre icone ?
asgard_guigui
Messages postés5Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention 7 mars 2007 7 mars 2007 à 09:44
Ok Merci les gars pour votre aide
Grace a vous j'ai mieux compros comment ca marchait!
A+++
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 6 mars 2007 à 15:04
Cirec est dans le vrai, il faut que tu forces la recompilation de l'archiveur :)
Quand on ne change que le fichier ressources le compilateur ne remarque pas que le code à changé et donc ne reconstruit rien. Pour que la modification soit prise en compte il faut faire Maj+F9 ou dans le menu projet "Construire ProjectName" et la et seulement la, les nouvelles informations seront prises en compte.
@+
Cirec
asgard_guigui
Messages postés5Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention 7 mars 2007 6 mars 2007 à 12:09
Merci pr tes infos Bestiol.
Mais en fait j'ai un probleme au niveau de la ressource, je pense. Lorsque je modifie l'extracteur, lors de l'extraction de l'archive cree, c'est un autre extracteur qui se lance (un non modifie).
J'ai pourtant lu les methodes sur les fichiers ressources et j'ai fait comme suit :
- Modification du code de l'extracteur.
- Creation de l'exe de l'extracteur
- Compilation du fichier extracteur.rc contenu dans l'archiveur avec la commande brcc32 'chemin complet de la ressource extracteur.rc'
- Puis creation de l'executable archiveur.
Ptite question supplementaire : dans le fichier .rc, c'est bien cela 'extract RCDATA extracteur.exe'
Mais cela ne fonctionne pas, et la ressource semble utilise un ancien exectutable.
Si tu pouvais me dire la procedure correcte ce serait cool...
Merci
++
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 5 mars 2007 à 16:46
Salut,
je pense qu'une méthode assez simple pour gérer les sous-répertoires est la suivante :
-> Lors de la création de l'archive, enregistrer dans un champ "Nom" le nom complet du fichier, relativement à la racine de l'archive.
>> L'enregistrement correspondant à Fichier1 aura pour champ Nom la valeur 'Rep1\Fichier1'
>> Les enregistrements correspondant à Fichier2 et Fichier3 auront pour champ Nom la valeur 'Rep1\Rep2\Fichier2' et 'Rep1\Rep2\Fichier3'
-> Lors de la décompression, créer au besoin le répertoire de destination correspondant à la racine de l'archive, puis pour chaque fichier, faire un ForceDirectories(ExtractFilePath(Racine + Nom)) puis créer le fichier dans l'arborescence ainsi générée.
Exemple : L'archive est décompressée dans Racine = 'C:\Temp\'. (Utiliser IncludeTrailingBackSlash ou IncludeTrailingPathDelimitor pour s'assurer qu'il y a bien le '\' à la fin)
Le Fichier1 doit donc avoir pour chemin de destination 'C:\Temp\Rep1\Fichier1'
ExtractFilePath(Racine + Nom) correspond à ExtractFilePath('C:\Temp\' + 'Rep1\Fichier1'). Cela renverra 'C:\Temp\Rep1\'.
ForceDirectories('C:\Temp\Rep1\') crée tous les répertoires non existant du chemin passé en paramètre. Dans notre cas, Rep1 est créé sous Temp.
L'extraction peut continuer dans le répertoire 'C:\Temp\Rep1\' :)
Vala vala ;)
Bonne prog' !
Bestiol
asgard_guigui
Messages postés5Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention 7 mars 2007 5 mars 2007 à 15:40
Salut,
Toujours pas de reponse alors j'ai essaye de gerer les sous repertoires. Voici les modifications que j'ai tente de faire :
Je pense que dans la partie archiveur il faut modifier le code original :
FillChar(SousRep, SizeOf(SousRep), #0); //met la variable sousRep a vide
par le code suivant :
StrPCopy(SousRep, 'Nom_du_sous_rep');
Ensuite dans la fonction Decompresser du fichier OpFichiers.pas de l'extracteur, il faut creer le sous repertoire en question par une instruction du type (en prenant soin de s'etre placer sous le repertoire de destination par l'instruction ChDir):
CreateDir('NewSubDir');
avant de creer le fichier par l'instruction :
DestF := TFileStream.Create(Dest, fmCreate);
J'ai essaye cela et ca ne fonctionne pas. L'archivage se fait correctement, mais a l'extraction, les sous repertoires ne se creent nulle part et l'extraction me genere des erreurs de type 'Violation d'acces a une adresse'.
Merci si vous avez des infos a ce sujet,
A++
Bonne continuation
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 3 mars 2007 à 01:33
Envoie-moi ton mail par mp !
J'ai voulu reprendre le code avec Delphi 7 pour voir si c'est un problème de Delphi 2006, mais j'ai des erreurs de compilation....
Jveux bien t'envoyer les sources mais je ne te garantis pas que j'ai pas introduit des problèmes en bidouillant ^^
Rudy3212
Messages postés154Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention31 décembre 2007 2 mars 2007 à 19:53
Bestiol tu pourait pas me donner tes sources qui renvoie le TMemoryStream.Size a 0 ?
par mail où autre ?
asgard_guigui
Messages postés5Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention 7 mars 2007 2 mars 2007 à 11:39
Salut,
Super source, fonctionne bien... Felicitations a Bestiol!!!
Juste un petit souci au niveau de la gestion des sous repertoires. Quelqu'un a la source complete?
Merci
++
Fred
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 26 avril 2006 à 13:57
lol :o)
Ben en fait j'en ai une qui est presque prête, mais j'ai un souci complètement stupide qui me bloque complètement : mon TMemoryStream.Size renvoie 0 alors que le code est identique à cette "vieille" version :os
enfin bref ça a fini par me casser les pieds et comme j'ai d'autres choses à faire, c'est un ptit peu en standby pour le moment ;o)
++
Bestiol.
Rudy3212
Messages postés154Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention31 décembre 2007 26 avril 2006 à 13:42
alors bestiol a quand une new version hein :)
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 3 févr. 2006 à 19:33
merci :)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 févr. 2006 à 19:16
Attention compresser avec UPX ou tout autre packer c'est bien à condition qu'il n'y ait qu'une fenêtre dans l'application en question si non au finale elle occupera plus de place en mémoire
il faut le savoir les packer d'exe ont aussi des désavantages
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 3 févr. 2006 à 19:05
thx ^^
Je ne compte faire que l'extracteur en C/C++ ou assembleur, si ça apporte quelque chose par rapport à Delphi.
La partie "archiveur" restera en Delphi, elle n'a pas besoin d'optimisation :)
Rudy3212
Messages postés154Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention31 décembre 2007 3 févr. 2006 à 19:03
je te conseille de résté en delphi, car tout reprogrammer n'est pas une bonne idée, et 2 après il fera moins de 50Ko et en plus tu peut le packté avec UPX mais Upack comprésse encore plus.
PS : J'ai mis 10/10 j'avait oublié :)
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 3 févr. 2006 à 19:03
En api je ne pense pas quand un prog fait entre 12 et 17 Ko tout mouillé en Delphi je pense que le C/C++ ne fait pas beaucoup mieux à voir
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 3 févr. 2006 à 18:53
Non la différence aussi c'est que malgré tout, un programme C/C++ ou asm restera plus petit qu'un programme Delphi :(
(Enfin je pense j'ai pas fait de conparatif)
oui c'est vrai c'est que la syntaxe qui change d'un language à un autre
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 3 févr. 2006 à 18:49
Oui, j'ai déjà eu à faire ça, c'est sûr c'est pas marrant ^^
A vrai dire c'est toujours de l'appel d'API, avec un langage ou un autre ! (pour faire un truc vraiment minimal)
Où fait avec les Api j'ai déjà fait des testes et c'est possible mais il y a du boulot
@+
Cirec
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 3 févr. 2006 à 18:27
merci :o)
Ce qui manque aussi, c'est un extracteur réellement petit, donc en assembleur ou éventuellement en C/C++, à voir...
Je vais jeter un oeil à tout ça ;o)
Rudy3212
Messages postés154Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention31 décembre 2007 3 févr. 2006 à 18:18
Sa serait vraiment cool avec la gestion des sous-répértoire, je pense que c'est preque un des dèrniers truc qu'il manque, parceque c'est vraiment une superbe source
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 3 févr. 2006 à 13:44
Merci Cirec d'avoir trouvé le problème, c'est quelque chose qu'il faudra que je précise :)
@Hafou
ton problème provient de la ZLib
{$IFDEF MSWINDOWS}
{$L deflate.obj}
{$L inflate.obj}
{$L inftrees.obj}
{$L trees.obj}
{$L adler32.obj} <<<<<<<<<<<<<<<<<
{$L infblock.obj}
{$L infcodes.obj}
{$L infutil.obj}
{$L inffast.obj}
il faut installer la ZLib (Zip library) dans certaine version de Delphi elle ne se met pas automatiquement mais elle doit se trouver sur le CD fait une recherche de ZLib.pas dans le répertoire d'installation de ton Delphi où dans le CD si non sur le net elle est disponible gratuitement
@+
Cirec
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 3 févr. 2006 à 13:21
@Rudy: non pcurie ne m'avait pas fourni son code... J'avais oublié ce détail des sous-répertoire. Je vais voir à l'ajouter dans la semaine qui arrive (ou celle d'après) et peut-être faire un tuto complet là-dessus !
@Hafou: je ne vois vraiment pas d'où cette erreur peut venir... Normalement elle survient quand une déclaration de procédure a été faite, mais pas son implémentation. Mais jamais j'aurais appelé une fonction "Adler32", ni fourni un code qui ne compile pas !
Ca doit venir de quelque chose chez toi.
cs_hafou
Messages postés29Date d'inscriptionjeudi 8 janvier 2004StatutMembreDernière intervention 8 décembre 2016 3 févr. 2006 à 09:50
En lançant la compilation du programme je reçois le message suivant :
unsatisfied Forward or external declaration "Adler32" ?
Pouvez vous m'orienter ? merci.
Rudy3212
Messages postés154Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention31 décembre 2007 2 févr. 2006 à 21:09
sinon ya pas la prose en charge des sous répertoires, il ta pas filer sa source modif pcurie ?
Rudy3212
Messages postés154Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention31 décembre 2007 2 févr. 2006 à 21:06
heu ta un problème sur l'archive que ya sur olance.developpez.com, ben il manque des fichiers genre CRC32.dcu... mais en les piquant de delphifr et en les mettant sa marche, afin voila c'était pour te le dire :)
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 2 févr. 2006 à 20:52
Merci :)
J'ai republié cette source sur mon espace olance.developpez.com avec un projet un peu plus structuré et un fichier explicatif ;)
Rudy3212
Messages postés154Date d'inscriptionvendredi 20 août 2004StatutMembreDernière intervention31 décembre 2007 2 févr. 2006 à 19:17
Super Source bravo
cs_hafou
Messages postés29Date d'inscriptionjeudi 8 janvier 2004StatutMembreDernière intervention 8 décembre 2016 9 déc. 2005 à 17:11
Je viens juste de relancer la compilation mais cette fois ci sous XP2000 et ça marche comme bonjour. Au fait j'avais utilisé Win98SE prélablement pour avoir cetter erreur . Merci.
cs_hafou
Messages postés29Date d'inscriptionjeudi 8 janvier 2004StatutMembreDernière intervention 8 décembre 2016 9 déc. 2005 à 17:11
Je viens juste de relancer la compilation mais cette fois ci sous XP2000 et ça marche comme bonjour. Au fait j'avais utilisé Win98SE prélablement pour avoir cetter erreur . Merci.
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 9 déc. 2005 à 16:58
:os
Aucune info au sujet de ton erreur sur le net, c'est étrange... Utilises-tu des experts ou autres choses de ce genre qui pourraient interférer sur la compilation ??
Je suis désolé je ne vois pas vraiment comment te venir en aide, cette erreur est on ne peut plus bizarre...
cs_hafou
Messages postés29Date d'inscriptionjeudi 8 janvier 2004StatutMembreDernière intervention 8 décembre 2016 9 déc. 2005 à 16:46
ma version est Delphi7. voilà et c'est tout comme message reçu. Merci.
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 9 déc. 2005 à 16:39
tu as juste "CompilersDefines.inc" ?? Tu n'as pas un message plus complet ?
peux-tu également préciser ta version de Delphi etc., ce fichier ne correspond à aucun des miens...
cs_hafou
Messages postés29Date d'inscriptionjeudi 8 janvier 2004StatutMembreDernière intervention 8 décembre 2016 9 déc. 2005 à 16:34
ce code est vraiment bon , seulement après l'avoir compilé j'ai le message suivant : CompilersDefines.inc ? que dois je faire ?
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 7 déc. 2005 à 20:45
ah c'est possible que je l'aie compressé oui :o)
Ca doit être écrit quelque part au début de l'exe si tu regardes avec un éditeur hexadécimal ^^
avec quel version de Delphi as-tu compilé l'extracteur ???
parce que je l'ais recompilé à cause du bug caractère en trop et avec D9 il fait 460 Ko et avec D4 359 K0
Euh ... Mmmm ... Wouaou !!!
j'en pert mes mots, je ne regrette qu'une chose c'est d'avoir mis presque 3 années pour tomber sur ce code et ça fait mal.;-)
Super, génial, très instructif... et pour ne pas répéter
ce que les autres ont déjà dit Bon boulot, Good Job...
Je donnerais bien 20/10 mais bon 10 étant le max il faudra s'en contenter ^_^
@+
Cirec
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 23 févr. 2005 à 01:26
Pas de quoi, je t'en prie ! :o)
Je devrais normalement écrire un tutoriel complet sur cette source dans les semaines à venir (oué je sais, je prévois loin ! :op).
Il est possible que j'apporte des améliorations, qui sait ! ;o)
Bonne prog' ! ^^
Bestiol.
ActiveX
Messages postés32Date d'inscriptionjeudi 6 février 2003StatutMembreDernière intervention22 janvier 2008 23 févr. 2005 à 00:02
Et bien voila tout est parfait merci Bestiol.
je te vaudrais ça.
bonne prog.
ActiveX.
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 22 févr. 2005 à 23:04
merci pour le bon boulot ! ^^
quoi qu'il en soit, si tu changes l'icone de l'extracteur, que tu recompiles le fichier .res à partir de ce nouvel extracteur et qu'ensuite tu recompiles le "lieur" (chose que je n'ai pas mentionnée, dsl), tout devrait être avec ta nouvelle icône ! :)
Le tout est de recompiler le lieur avec le nouveau extract.res ! ;o)
ActiveX
Messages postés32Date d'inscriptionjeudi 6 février 2003StatutMembreDernière intervention22 janvier 2008 22 févr. 2005 à 22:47
J'ai fais ce que tu m'as dit oui c'est tout-a-faitnormal pour changer l'icon du programme en soit.
Mais ce dont je voulais dire c'est l'icone du nouveau fichier compressé en exécutable il contient toujours ton icone personnel. et c'est ça que je veux mette l'icone d'install.
voila peux tu m'éclairer.
merci beaucoup a part ça tu fais du bon boulot.
ActiveX
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 22 févr. 2005 à 19:15
Salut !
Il me semblait avoir inclus le fichier extracteur.rc...
Ce n'es tpas si grave, il ne contient qu'une ligne :
extract RCDATA extracteur.exe
(si je ne me trompe pas car j'ai remanié cette source récemment)
Donc pour l'icône d'install tu la changes dans les options du projet extracteur.dpr, tu recompiles et tu refais le dpr, mais je pense que tu avais saisi le truc ! ;o)
Bonne prog' !
Bestiol.
ActiveX
Messages postés32Date d'inscriptionjeudi 6 février 2003StatutMembreDernière intervention22 janvier 2008 22 févr. 2005 à 17:06
Je voudrais changer l'icone et mettre un icône d'installation comment je peux m'y prendre.
tu as crée un fichier extracteur.res
et on trouve a quel endroit ce fichier extracteur.rc
à part ça très bon travail très utile j'adore.
ActiveX.
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 9 juin 2004 à 08:11
ben écoute y a pas de quoi !!
Ravi de faire ton bonheur ! :o)
Mais c'est vrai que j'y ai passé du temps, pour que ça fonctionne correctement !
Enfin surtout n'oublie pas de m'envoyer un ZIP que je mette le tout à jour... A moins que tu préfères reposter toi-même une source ?
>>bestiol@cario.fr
++
Bestiol.
pcurie
Messages postés3Date d'inscriptionlundi 17 mars 2003StatutMembreDernière intervention 8 juin 2004 8 juin 2004 à 16:35
c bon j'ai fini la gestion des sous repertoires merci encore pour cette tres bonne source! simple et efficace tout ce que j'aime ;)
pcurie
Messages postés3Date d'inscriptionlundi 17 mars 2003StatutMembreDernière intervention 8 juin 2004 8 juin 2004 à 08:48
c bon ca marche ! je vais expliquer au cas ou d'autre pourraient bloquer comme moi, dans le type de ressource il faut mettre RCDATA (c de la que venait mon pb) et en name il faut mettre EXTRACT voila merci pour ton aide bestiol j'y etais presque arrivé et tu m'as donné l'idee lol!
et sinon pour le caractère suplementaire c normal les string ou char commence a 0 et se termine toujours a length-1
en tout cas merci!!
euh g pas l'impression que les sous répertoires marchent as tu fait une nouvelle version? sinon je le ferai
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 7 juin 2004 à 19:45
Merci merci :oD
pour le .res en fait il faut le recompiler !
Je sais plus si j'ai laissé le fichier .rc dans le zip. Car c'est un fichier rc qu'il faut créer avec le bloc-notes... Tu as normalement des tutoriaux pour apprendre à faire ça...
Dont un de Delphicool sur developpez.com normalement (je sais c'est un site concurrent mais bon faut bien donner de bonnes références :P)
Voilà si jamais y a un pb redemande ;o)
++
bestiol.
pcurie
Messages postés3Date d'inscriptionlundi 17 mars 2003StatutMembreDernière intervention 8 juin 2004 7 juin 2004 à 14:38
salut j'ai essayé ton prog! franchment super ! sauf que j'arrive pas a modifier extracteur.res ! je debute en delphi , et je ne sais pas comment generer le .res j'ai essayer de prendre le .exe et de le renommé en .res mais j'ai une erreur comme quoi la ressource est en 16bits ....
Si tu as une idée d'ou vient le pb je suis preneur
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 17 nov. 2003 à 20:16
Merci bien !!
ça fait plaisir de voir que ça plaît ! (petite répétition mais bon, vous allez pas me le reprocher, si ?! :o) )
@+ !
Bestiol.
SiZiOUS
Messages postés69Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 novembre 2006 17 nov. 2003 à 18:58
Super, franchement, chapeau Bestiol :)
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 19 oct. 2003 à 21:45
ah désolé... Bah c'est tout bête...
Quand dans l'extracteur le champ RepDft est mis à jour dans le OnCreate de la fiche, il suffit de faire aller la boucle à length(...) - 1 !
>>for i := 0 to Length(Princip.RepDft) - 1 do
edDir.Text := edDir.Text + Princip.RepDft[i];
Logiquement ça devrait marcher... mais je vois que j'ai carrément remplacé la boucle par "edDir.Text := Copy(Princip.RepDft, 0, SizeOf(Princip.RepDft));"
Et si ça ne fonctionne pas, suffit de mettre SizeOf(...) - 1 !
Bonne prog' !
Bestiol.
PS: j'ai as l'air sûr de moi dans ce commentaire, c'est parce que ça fait des mois que j'ai pas touché à cette source !
cs_CloudStrife
Messages postés12Date d'inscriptiondimanche 10 mars 2002StatutMembreDernière intervention14 janvier 2006 18 oct. 2003 à 22:45
et c'est quoi le changement a apporter pour que ça marche ?
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 18 oct. 2003 à 00:32
Merci !!
Pour le bug avec le chemin, j'avais remarqué, et j'ai même déjà eu la remarque...
Je n'ai jamais compris pourquoi ça fait ça, alors que les formats sont bien définis à l'identique entre l'extracteur et l'archiveur...
J'avais modifié chez moi le prog pour supprimer automatiquement le dernier caractère du chemin par défaut... méthode barbare mais comme à tous les coups il y est, à tous les coups ça marche ! =0)
Voilà voilà !
@+
Bestiol.
cs_CloudStrife
Messages postés12Date d'inscriptiondimanche 10 mars 2002StatutMembreDernière intervention14 janvier 2006 17 oct. 2003 à 23:29
Pas mal ! vachement pratique pour faire une installation de logiciel !
parcontre y a un bug... quand tu entre un chemin, à la décompression il met un "" juste àpres le chemin (et j'ai pas trouver pourquoi), et ça fait qu'il faut modifer à la main... pour un logiciel d'install c'est un peu chiant...
CleyFaye
Messages postés23Date d'inscriptionsamedi 22 mars 2003StatutMembreDernière intervention21 août 2003 28 mars 2003 à 19:45
ah dsl :p
DelphiCool
Messages postés455Date d'inscriptionmardi 24 juillet 2001StatutMembreDernière intervention10 mars 2009 28 mars 2003 à 19:43
CleyFaye, je n'ai pas dit des unitées en trop, mais des unitées trop lourdes comme "Forms" par exemple
CleyFaye
Messages postés23Date d'inscriptionsamedi 22 mars 2003StatutMembreDernière intervention21 août 2003 28 mars 2003 à 18:51
Bah je sais pas pour les autres versions mais dans delphi 5 quand le code est optimisé (options du projet ) et qu'il n'y a pas les infos de deboggage(toujours dans les options), le compilateur ne compile que le code utilisé, ce qui veut dire que mème si il y a des unitées en trop, leur code ne sera pas forcément compilé...
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 25 mars 2003 à 13:47
Salut Delphicool !!
Pour la taille de l'extracteur, je sais !! Mais le but du source n'était pas de faire l'extracteur le plus petit possible !
Une version viendra, avec cette amélioration !
DelphiCool
Messages postés455Date d'inscriptionmardi 24 juillet 2001StatutMembreDernière intervention10 mars 2009 24 mars 2003 à 19:55
Salut Bestiol
Cool ton source.
Il aurrait etais encore mieux si tu utilisais le monis d'unitées possible dans ton extracteur.
Car un extracteur de 180 Ko c'est un peu lourd quand meme.
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 23 mars 2003 à 16:54
Désolé, j'avais mis un mot de passe au ZIP... Je vais arranger ça !!
1 nov. 2010 à 20:08
19 mars 2010 à 00:30
Je decouvre cet archiveur et j essaie de le comprendre. Certe il est detaillé mais je suis debutant ...
Toutefois je n ai pas trouvé le chemin de l icone... Alors ma question est idiote mais ne porte que sur l icone de l'archive crée.est il possible de mettre sa propre icone ?
7 mars 2007 à 09:44
Grace a vous j'ai mieux compros comment ca marchait!
A+++
6 mars 2007 à 15:04
6 mars 2007 à 12:18
@+
Cirec
6 mars 2007 à 12:09
Mais en fait j'ai un probleme au niveau de la ressource, je pense. Lorsque je modifie l'extracteur, lors de l'extraction de l'archive cree, c'est un autre extracteur qui se lance (un non modifie).
J'ai pourtant lu les methodes sur les fichiers ressources et j'ai fait comme suit :
- Modification du code de l'extracteur.
- Creation de l'exe de l'extracteur
- Compilation du fichier extracteur.rc contenu dans l'archiveur avec la commande brcc32 'chemin complet de la ressource extracteur.rc'
- Puis creation de l'executable archiveur.
Ptite question supplementaire : dans le fichier .rc, c'est bien cela 'extract RCDATA extracteur.exe'
Mais cela ne fonctionne pas, et la ressource semble utilise un ancien exectutable.
Si tu pouvais me dire la procedure correcte ce serait cool...
Merci
++
5 mars 2007 à 16:46
je pense qu'une méthode assez simple pour gérer les sous-répertoires est la suivante :
-> Lors de la création de l'archive, enregistrer dans un champ "Nom" le nom complet du fichier, relativement à la racine de l'archive.
Exemple:
racine
|
|---Rep1
| |--Fichier1
| |---Rep2
| |--Fichier2
| |--Fichier3
>> L'enregistrement correspondant à Fichier1 aura pour champ Nom la valeur 'Rep1\Fichier1'
>> Les enregistrements correspondant à Fichier2 et Fichier3 auront pour champ Nom la valeur 'Rep1\Rep2\Fichier2' et 'Rep1\Rep2\Fichier3'
-> Lors de la décompression, créer au besoin le répertoire de destination correspondant à la racine de l'archive, puis pour chaque fichier, faire un ForceDirectories(ExtractFilePath(Racine + Nom)) puis créer le fichier dans l'arborescence ainsi générée.
Exemple : L'archive est décompressée dans Racine = 'C:\Temp\'. (Utiliser IncludeTrailingBackSlash ou IncludeTrailingPathDelimitor pour s'assurer qu'il y a bien le '\' à la fin)
Le Fichier1 doit donc avoir pour chemin de destination 'C:\Temp\Rep1\Fichier1'
ExtractFilePath(Racine + Nom) correspond à ExtractFilePath('C:\Temp\' + 'Rep1\Fichier1'). Cela renverra 'C:\Temp\Rep1\'.
ForceDirectories('C:\Temp\Rep1\') crée tous les répertoires non existant du chemin passé en paramètre. Dans notre cas, Rep1 est créé sous Temp.
L'extraction peut continuer dans le répertoire 'C:\Temp\Rep1\' :)
Vala vala ;)
Bonne prog' !
Bestiol
5 mars 2007 à 15:40
Toujours pas de reponse alors j'ai essaye de gerer les sous repertoires. Voici les modifications que j'ai tente de faire :
Je pense que dans la partie archiveur il faut modifier le code original :
FillChar(SousRep, SizeOf(SousRep), #0); //met la variable sousRep a vide
par le code suivant :
StrPCopy(SousRep, 'Nom_du_sous_rep');
Ensuite dans la fonction Decompresser du fichier OpFichiers.pas de l'extracteur, il faut creer le sous repertoire en question par une instruction du type (en prenant soin de s'etre placer sous le repertoire de destination par l'instruction ChDir):
CreateDir('NewSubDir');
avant de creer le fichier par l'instruction :
DestF := TFileStream.Create(Dest, fmCreate);
J'ai essaye cela et ca ne fonctionne pas. L'archivage se fait correctement, mais a l'extraction, les sous repertoires ne se creent nulle part et l'extraction me genere des erreurs de type 'Violation d'acces a une adresse'.
Merci si vous avez des infos a ce sujet,
A++
Bonne continuation
3 mars 2007 à 01:33
J'ai voulu reprendre le code avec Delphi 7 pour voir si c'est un problème de Delphi 2006, mais j'ai des erreurs de compilation....
Jveux bien t'envoyer les sources mais je ne te garantis pas que j'ai pas introduit des problèmes en bidouillant ^^
2 mars 2007 à 19:53
par mail où autre ?
2 mars 2007 à 11:39
Super source, fonctionne bien... Felicitations a Bestiol!!!
Juste un petit souci au niveau de la gestion des sous repertoires. Quelqu'un a la source complete?
Merci
++
Fred
26 avril 2006 à 13:57
Ben en fait j'en ai une qui est presque prête, mais j'ai un souci complètement stupide qui me bloque complètement : mon TMemoryStream.Size renvoie 0 alors que le code est identique à cette "vieille" version :os
enfin bref ça a fini par me casser les pieds et comme j'ai d'autres choses à faire, c'est un ptit peu en standby pour le moment ;o)
++
Bestiol.
26 avril 2006 à 13:42
3 févr. 2006 à 19:33
3 févr. 2006 à 19:16
http://www.cppfrance.com/code.aspx?ID=33730
3 févr. 2006 à 19:13
Mais packer un EXE de 17ko je sais pas trop si ça vaut le coup ! C'est la taille d'un exe compilé avec ce code :
program extracteur;
uses
Windows;
begin
end.
L'ajout de Classes fait monter à 76ko, donc je devrai me passer des streams ^^
Je vous tiens au courant de tout ça !
3 févr. 2006 à 19:08
il faut le savoir les packer d'exe ont aussi des désavantages
3 févr. 2006 à 19:05
Je ne compte faire que l'extracteur en C/C++ ou assembleur, si ça apporte quelque chose par rapport à Delphi.
La partie "archiveur" restera en Delphi, elle n'a pas besoin d'optimisation :)
3 févr. 2006 à 19:03
PS : J'ai mis 10/10 j'avait oublié :)
3 févr. 2006 à 19:03
3 févr. 2006 à 19:01
3 févr. 2006 à 18:58
3 févr. 2006 à 18:56
3 févr. 2006 à 18:53
(Enfin je pense j'ai pas fait de conparatif)
3 févr. 2006 à 18:51
3 févr. 2006 à 18:49
A vrai dire c'est toujours de l'appel d'API, avec un langage ou un autre ! (pour faire un truc vraiment minimal)
3 févr. 2006 à 18:46
@+
Cirec
3 févr. 2006 à 18:27
Ce qui manque aussi, c'est un extracteur réellement petit, donc en assembleur ou éventuellement en C/C++, à voir...
Je vais jeter un oeil à tout ça ;o)
3 févr. 2006 à 18:18
3 févr. 2006 à 13:44
(je pensais qu'elle était installée d'office)
++
Bestiol.
3 févr. 2006 à 13:39
ton problème provient de la ZLib
{$IFDEF MSWINDOWS}
{$L deflate.obj}
{$L inflate.obj}
{$L inftrees.obj}
{$L trees.obj}
{$L adler32.obj} <<<<<<<<<<<<<<<<<
{$L infblock.obj}
{$L infcodes.obj}
{$L infutil.obj}
{$L inffast.obj}
il faut installer la ZLib (Zip library) dans certaine version de Delphi elle ne se met pas automatiquement mais elle doit se trouver sur le CD fait une recherche de ZLib.pas dans le répertoire d'installation de ton Delphi où dans le CD si non sur le net elle est disponible gratuitement
@+
Cirec
3 févr. 2006 à 13:21
@Hafou: je ne vois vraiment pas d'où cette erreur peut venir... Normalement elle survient quand une déclaration de procédure a été faite, mais pas son implémentation. Mais jamais j'aurais appelé une fonction "Adler32", ni fourni un code qui ne compile pas !
Ca doit venir de quelque chose chez toi.
3 févr. 2006 à 09:50
unsatisfied Forward or external declaration "Adler32" ?
Pouvez vous m'orienter ? merci.
2 févr. 2006 à 21:09
2 févr. 2006 à 21:06
2 févr. 2006 à 20:52
J'ai republié cette source sur mon espace olance.developpez.com avec un projet un peu plus structuré et un fichier explicatif ;)
2 févr. 2006 à 19:17
9 déc. 2005 à 17:11
9 déc. 2005 à 17:11
9 déc. 2005 à 16:58
Aucune info au sujet de ton erreur sur le net, c'est étrange... Utilises-tu des experts ou autres choses de ce genre qui pourraient interférer sur la compilation ??
Je suis désolé je ne vois pas vraiment comment te venir en aide, cette erreur est on ne peut plus bizarre...
9 déc. 2005 à 16:46
9 déc. 2005 à 16:39
peux-tu également préciser ta version de Delphi etc., ce fichier ne correspond à aucun des miens...
9 déc. 2005 à 16:34
7 déc. 2005 à 20:45
Ca doit être écrit quelque part au début de l'exe si tu regardes avec un éditeur hexadécimal ^^
Bonne prog' !
6 déc. 2005 à 13:26
je l'ai fait avec UPX et là il a plus que 145,5 Ko et ça fonctionne toujours ^_^
@++
Cirec
6 déc. 2005 à 13:20
Merci pour tes commentaires, ça fait plaisir de voir que même presque 3 ans après sa publication, cette source sert toujours ! :o)
A l'époque, j'ai du compiler ça avec Delphi 6 ou 7 perso.
6 déc. 2005 à 12:31
parce que je l'ais recompilé à cause du bug caractère en trop et avec D9 il fait 460 Ko et avec D4 359 K0
@+
Cirec
6 déc. 2005 à 10:39
j'en pert mes mots, je ne regrette qu'une chose c'est d'avoir mis presque 3 années pour tomber sur ce code et ça fait mal.;-)
Super, génial, très instructif... et pour ne pas répéter
ce que les autres ont déjà dit Bon boulot, Good Job...
Je donnerais bien 20/10 mais bon 10 étant le max il faudra s'en contenter ^_^
@+
Cirec
23 févr. 2005 à 01:26
Je devrais normalement écrire un tutoriel complet sur cette source dans les semaines à venir (oué je sais, je prévois loin ! :op).
Il est possible que j'apporte des améliorations, qui sait ! ;o)
Bonne prog' ! ^^
Bestiol.
23 févr. 2005 à 00:02
je te vaudrais ça.
bonne prog.
ActiveX.
22 févr. 2005 à 23:04
quoi qu'il en soit, si tu changes l'icone de l'extracteur, que tu recompiles le fichier .res à partir de ce nouvel extracteur et qu'ensuite tu recompiles le "lieur" (chose que je n'ai pas mentionnée, dsl), tout devrait être avec ta nouvelle icône ! :)
Le tout est de recompiler le lieur avec le nouveau extract.res ! ;o)
22 févr. 2005 à 22:47
Mais ce dont je voulais dire c'est l'icone du nouveau fichier compressé en exécutable il contient toujours ton icone personnel. et c'est ça que je veux mette l'icone d'install.
voila peux tu m'éclairer.
merci beaucoup a part ça tu fais du bon boulot.
ActiveX
22 févr. 2005 à 19:15
Il me semblait avoir inclus le fichier extracteur.rc...
Ce n'es tpas si grave, il ne contient qu'une ligne :
extract RCDATA extracteur.exe
(si je ne me trompe pas car j'ai remanié cette source récemment)
Donc pour l'icône d'install tu la changes dans les options du projet extracteur.dpr, tu recompiles et tu refais le dpr, mais je pense que tu avais saisi le truc ! ;o)
Bonne prog' !
Bestiol.
22 févr. 2005 à 17:06
tu as crée un fichier extracteur.res
et on trouve a quel endroit ce fichier extracteur.rc
à part ça très bon travail très utile j'adore.
ActiveX.
9 juin 2004 à 08:11
Ravi de faire ton bonheur ! :o)
Mais c'est vrai que j'y ai passé du temps, pour que ça fonctionne correctement !
Enfin surtout n'oublie pas de m'envoyer un ZIP que je mette le tout à jour... A moins que tu préfères reposter toi-même une source ?
>>bestiol@cario.fr
++
Bestiol.
8 juin 2004 à 16:35
8 juin 2004 à 08:48
et sinon pour le caractère suplementaire c normal les string ou char commence a 0 et se termine toujours a length-1
en tout cas merci!!
euh g pas l'impression que les sous répertoires marchent as tu fait une nouvelle version? sinon je le ferai
7 juin 2004 à 19:45
pour le .res en fait il faut le recompiler !
Je sais plus si j'ai laissé le fichier .rc dans le zip. Car c'est un fichier rc qu'il faut créer avec le bloc-notes... Tu as normalement des tutoriaux pour apprendre à faire ça...
Dont un de Delphicool sur developpez.com normalement (je sais c'est un site concurrent mais bon faut bien donner de bonnes références :P)
Voilà si jamais y a un pb redemande ;o)
++
bestiol.
7 juin 2004 à 14:38
Si tu as une idée d'ou vient le pb je suis preneur
17 nov. 2003 à 20:16
ça fait plaisir de voir que ça plaît ! (petite répétition mais bon, vous allez pas me le reprocher, si ?! :o) )
@+ !
Bestiol.
17 nov. 2003 à 18:58
19 oct. 2003 à 21:45
Quand dans l'extracteur le champ RepDft est mis à jour dans le OnCreate de la fiche, il suffit de faire aller la boucle à length(...) - 1 !
>>for i := 0 to Length(Princip.RepDft) - 1 do
edDir.Text := edDir.Text + Princip.RepDft[i];
Logiquement ça devrait marcher... mais je vois que j'ai carrément remplacé la boucle par "edDir.Text := Copy(Princip.RepDft, 0, SizeOf(Princip.RepDft));"
Et si ça ne fonctionne pas, suffit de mettre SizeOf(...) - 1 !
Bonne prog' !
Bestiol.
PS: j'ai as l'air sûr de moi dans ce commentaire, c'est parce que ça fait des mois que j'ai pas touché à cette source !
18 oct. 2003 à 22:45
18 oct. 2003 à 00:32
Pour le bug avec le chemin, j'avais remarqué, et j'ai même déjà eu la remarque...
Je n'ai jamais compris pourquoi ça fait ça, alors que les formats sont bien définis à l'identique entre l'extracteur et l'archiveur...
J'avais modifié chez moi le prog pour supprimer automatiquement le dernier caractère du chemin par défaut... méthode barbare mais comme à tous les coups il y est, à tous les coups ça marche ! =0)
Voilà voilà !
@+
Bestiol.
17 oct. 2003 à 23:29
parcontre y a un bug... quand tu entre un chemin, à la décompression il met un "" juste àpres le chemin (et j'ai pas trouver pourquoi), et ça fait qu'il faut modifer à la main... pour un logiciel d'install c'est un peu chiant...
28 mars 2003 à 19:45
28 mars 2003 à 19:43
28 mars 2003 à 18:51
25 mars 2003 à 13:47
Pour la taille de l'extracteur, je sais !! Mais le but du source n'était pas de faire l'extracteur le plus petit possible !
Une version viendra, avec cette amélioration !
24 mars 2003 à 19:55
Cool ton source.
Il aurrait etais encore mieux si tu utilisais le monis d'unitées possible dans ton extracteur.
Car un extracteur de 180 Ko c'est un peu lourd quand meme.
23 mars 2003 à 16:54