begin process at 2008 07 25 21:41:08
1 216 519 membres
470 nouveaux aujourd'hui
14 182 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ARCHIVAGE EN AUTOEXTRACTIBLE (SELF-EXTRACTOR) AVEC COMPRESSION


Information sur la source

Catégorie :Compression & Split Classé sous : archivage, autoextractible, selfextractor, compression, sfx Niveau : Expert Date de création : 23/03/2003 Date de mise à jour : 23/03/2003 17:35:47 Vu / téléchargé: 8 480 / 1 297

Note :
10 / 10 - par 7 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (69)
Ajouter un commentaire et/ou une note


Description

Voilà en gros ce que je comptais faire par la suite quand j'ai sorti mon premier prog' de compression avec la zLib... Je sors enfin mon autoextractible !! J'espère que ça vous plaira !

La source se décompose en deux parties...
1: Le programme extracteur.
C'est dans ce programme que sont stockés les fichiers compressés... Il sert de base pour ensuite pouvoir avoir l'archive autoextractible...

2: L'archiveur
La version que j'ai mise ici est très simplifiée... J'ai rencontré quelques problèmes pour la "vraie" version... Mais le principe est là : l'utilisateur choisit les fichiers à archiver et demande la création du "SFX"... Les fichiers sont compressés un à un et placés dans l'EXE extracteur, qui lui est stocké en ressource dans l'archiveur !

J'utilise pour l'archive un système d'entêtes... Ca peut être intéressant pour ceux qui se demandent comment ça marche... Et bien sûr, compression/décompression des fichiers avec la zLib, fournie avec Delphi !

Source

  • Dans le ZIP...
  • Un répertoire "extracteur" qui contient les sources de... l'extracteur !! Avec également les explications sur le stockage dans l'EXE...
  • Un répertoire "archiveur simplifié", qui contient les sources de l'archiveur et le fichier .res de l'extracteur !
Dans le ZIP...
Un répertoire "extracteur" qui contient les sources de... l'extracteur !! Avec également les explications sur le stockage dans l'EXE...
Un répertoire "archiveur simplifié", qui contient les sources de l'archiveur et le fichier .res de l'extracteur ! 

Conclusion

Le code est assez commenté, mais si jamais vous avez des questions, y a tout ce qu'il faut sur ce site pour les poser !

Il reste quelques bugs ou trucs pas super... Par exemple, y a un problème avec le répertoire d'extraction par défaut... Il rajoute toujours un caractère en trop !
Et puis le répertoire d'extraction doit obligatoirement exister pour pouvoir extraire l'archive... Je ferai une mise à jour qui enlève ça ! [C'est maintenant fait !]
Enfin, faudra améliorer la gestion de la barre de progression !
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de Bestiol le 23/03/2003 16:54:05

    Désolé, j'avais mis un mot de passe au ZIP... Je vais arranger ça !!

  • signaler à un administrateur
    Commentaire de DelphiCool le 24/03/2003 19:55:26 administrateur CS

    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.

  • signaler à un administrateur
    Commentaire de Bestiol le 25/03/2003 13:47:56

    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 !

  • signaler à un administrateur
    Commentaire de CleyFaye le 28/03/2003 18:51:58

    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é...

  • signaler à un administrateur
    Commentaire de DelphiCool le 28/03/2003 19:43:31 administrateur CS

    CleyFaye, je n'ai pas dit des unitées en trop, mais des unitées trop lourdes comme "Forms" par exemple

  • signaler à un administrateur
    Commentaire de CleyFaye le 28/03/2003 19:45:00

    ah dsl :p

  • signaler à un administrateur
    Commentaire de CloudStrife le 17/10/2003 23:29:42

    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...

  • signaler à un administrateur
    Commentaire de Bestiol le 18/10/2003 00:32:37

    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.

  • signaler à un administrateur
    Commentaire de CloudStrife le 18/10/2003 22:45:29

    et c'est quoi le changement a apporter pour que ça marche ?

  • signaler à un administrateur
    Commentaire de Bestiol le 19/10/2003 21:45:49

    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 !

  • signaler à un administrateur
    Commentaire de SiZiOUS le 17/11/2003 18:58:33

    Super, franchement, chapeau Bestiol :)

  • signaler à un administrateur
    Commentaire de Bestiol le 17/11/2003 20:16:07

    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.

  • signaler à un administrateur
    Commentaire de pcurie le 07/06/2004 14:38:54

    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

  • signaler à un administrateur
    Commentaire de Bestiol le 07/06/2004 19:45:17

    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.

  • signaler à un administrateur
    Commentaire de pcurie le 08/06/2004 08:48:45

    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

  • signaler à un administrateur
    Commentaire de pcurie le 08/06/2004 16:35:09

    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 ;)

  • signaler à un administrateur
    Commentaire de Bestiol le 09/06/2004 08:11:42

    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.

  • signaler à un administrateur
    Commentaire de ActiveX le 22/02/2005 17:06:01

    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.

  • signaler à un administrateur
    Commentaire de Bestiol le 22/02/2005 19:15:19

    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.

  • signaler à un administrateur
    Commentaire de ActiveX le 22/02/2005 22:47:55

    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

  • signaler à un administrateur
    Commentaire de Bestiol le 22/02/2005 23:04:14

    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)

  • signaler à un administrateur
    Commentaire de ActiveX le 23/02/2005 00:02:18

    Et bien voila tout est parfait merci Bestiol.

    je te vaudrais ça.

    bonne prog.

    ActiveX.

  • signaler à un administrateur
    Commentaire de Bestiol le 23/02/2005 01:26:55

    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.

  • signaler à un administrateur
    Commentaire de cirec le 06/12/2005 10:39:53 administrateur CS

    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

  • signaler à un administrateur
    Commentaire de cirec le 06/12/2005 12:31:42 administrateur CS

    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

    @+
    Cirec

  • signaler à un administrateur
    Commentaire de Bestiol le 06/12/2005 13:20:40

    Salut Cirec !

    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.

  • signaler à un administrateur
    Commentaire de cirec le 06/12/2005 13:26:52 administrateur CS

    ça y est j'ai compris l'extracteur à été compressé avec utilitaire du style UPX n'est ce pas ?

    je l'ai fait avec UPX et là il a plus que 145,5 Ko et ça fonctionne toujours ^_^

    @++
    Cirec

  • signaler à un administrateur
    Commentaire de Bestiol le 07/12/2005 20:45:10

    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 ^^

    Bonne prog' !

  • signaler à un administrateur
    Commentaire de hafou le 09/12/2005 16:34:53

    ce code est vraiment bon , seulement après l'avoir compilé j'ai le message suivant :  CompilersDefines.inc ?  que dois je faire ?

  • signaler à un administrateur
    Commentaire de Bestiol le 09/12/2005 16:39:22

    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...

  • signaler à un administrateur
    Commentaire de hafou le 09/12/2005 16:46:45

    ma version est Delphi7. voilà et c'est tout comme message reçu. Merci.

  • signaler à un administrateur
    Commentaire de Bestiol le 09/12/2005 16:58:55

    :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...

  • signaler à un administrateur
    Commentaire de hafou le 09/12/2005 17:11:15

    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.

  • signaler à un administrateur
    Commentaire de hafou le 09/12/2005 17:11:19

    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.

  • signaler à un administrateur
    Commentaire de Rudy3212 le 02/02/2006 19:17:41

    Super Source bravo

  • signaler à un administrateur
    Commentaire de Bestiol le 02/02/2006 20:52:13

    Merci :)

    J'ai republié cette source sur mon espace olance.developpez.com avec un projet un peu plus structuré et un fichier explicatif ;)

  • signaler à un administrateur
    Commentaire de Rudy3212 le 02/02/2006 21:06:42

    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 :)

  • signaler à un administrateur
    Commentaire de Rudy3212 le 02/02/2006 21:09:31

    sinon ya pas la prose en charge des sous répertoires, il ta pas filer sa source modif pcurie ?

  • signaler à un administrateur
    Commentaire de hafou le 03/02/2006 09:50:04

    En lançant la compilation du programme je reçois le message suivant :

          unsatisfied Forward or external declaration "Adler32" ?  

      Pouvez vous m'orienter ?   merci.  

  • signaler à un administrateur
    Commentaire de Bestiol le 03/02/2006 13:21:06

    @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.

  • signaler à un administrateur
    Commentaire de cirec le 03/02/2006 13:39:03 administrateur CS

    @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

  • signaler à un administrateur
    Commentaire de Bestiol le 03/02/2006 13:44:50

    Merci Cirec d'avoir trouvé le problème, c'est quelque chose qu'il faudra que je précise :)

    (je pensais qu'elle était installée d'office)

    ++
    Bestiol.

  • signaler à un administrateur
    Commentaire de Rudy3212 le 03/02/2006 18:18:29

    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

  • signaler à un administrateur
    Commentaire de Bestiol le 03/02/2006 18:27:10

    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)

  • signaler à un administrateur
    Commentaire de cirec le 03/02/2006 18:46:27 administrateur CS

    Où fait avec les Api j'ai déjà fait des testes et c'est possible mais il y a du boulot

    @+
    Cirec

  • signaler à un administrateur
    Commentaire de Bestiol le 03/02/2006 18:49:30

    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)

  • signaler à un administrateur
    Commentaire de cirec le 03/02/2006 18:51:43 administrateur CS

    oui c'est vrai c'est que la syntaxe qui change d'un language à un autre

  • signaler à un administrateur
    Commentaire de Bestiol le 03/02/2006 18:53:20

    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)

  • signaler à un administrateur
    Commentaire de cirec le 03/02/2006 18:56:33 administrateur CS

    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

  • signaler à un administrateur
    Commentaire de Bestiol le 03/02/2006 18:58:16

    je testerai à l'occasion :)

  • signaler à un administrateur
    Commentaire de cirec le 03/02/2006 19:01:10 administrateur CS

    je ne pratique pas le C/C++ mais tiens moi au courant de tes découvertes c'est toujours interressant de savoir

  • signaler à un administrateur
    Commentaire de Bestiol le 03/02/2006 19:03:16

    Y a pas de souci ;o)

  • signaler à un administrateur
    Commentaire de Rudy3212 le 03/02/2006 19:03:28

    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é :)

  • signaler à un administrateur
    Commentaire de Bestiol le 03/02/2006 19:05:56

    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 :)

  • signaler à un administrateur
    Commentaire de cirec le 03/02/2006 19:08:45 administrateur CS

    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

  • signaler à un administrateur
    Commentaire de Bestiol le 03/02/2006 19:13:22

    Oui tout à fait ;)
    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 !

  • signaler à un administrateur
    Commentaire de BruNews le 03/02/2006 19:16:07 administrateur CS

    Exe (avec fenêtre) de 5 Ko en C, exemple ici:
    http://www.cppfrance.com/code.aspx?ID=33730

  • signaler à un administrateur
    Commentaire de Bestiol le 03/02/2006 19:33:09

    merci :)

  • signaler à un administrateur
    Commentaire de Rudy3212 le 26/04/2006 13:42:05

    alors bestiol a quand une new version hein :)

  • signaler à un administrateur
    Commentaire de Bestiol le 26/04/2006 13:57:53

    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.

  • signaler à un administrateur
    Commentaire de asgard_guigui le 02/03/2007 11:39:57

    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

  • signaler à un administrateur
    Commentaire de Rudy3212 le 02/03/2007 19:53:43

    Bestiol tu pourait pas me donner tes sources qui renvoie le TMemoryStream.Size a 0 ?
    par mail où autre ?

  • signaler à un administrateur
    Commentaire de Bestiol le 03/03/2007 01:33:01

    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 ^^

  • signaler à un administrateur
    Commentaire de asgard_guigui le 05/03/2007 15:40:02

    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

  • signaler à un administrateur
    Commentaire de Bestiol le 05/03/2007 16:46:26

    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.

    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

  • signaler à un administrateur
    Commentaire de asgard_guigui le 06/03/2007 12:09:44

    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

    ++

  • signaler à un administrateur
    Commentaire de cirec le 06/03/2007 12:18:47 administrateur CS

    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

  • signaler à un administrateur
    Commentaire de Bestiol le 06/03/2007 15:04:50

    Cirec est dans le vrai, il faut que tu forces la recompilation de l'archiveur :)

  • signaler à un administrateur
    Commentaire de asgard_guigui le 07/03/2007 09:44:41

    Ok Merci les gars pour votre aide
    Grace a vous j'ai mieux compros comment ca marchait!

    A+++

Ajouter un commentaire

Discussions en rapport avec ce code source