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

Langage Delphi Discussion :

Comment créer un fichier zip à l'aide de Delphi ?


Sujet :

Langage Delphi

  1. #1
    Invité
    Invité(e)
    Par défaut Comment créer un fichier zip à l'aide de Delphi ?
    Bonjour,

    Je souhaite créer, à l'aide de Delphi7, un fichier archive ZIP d'un répertoire qui contient des sous-répertoires.

    J'ai trouvé sur le forum des infos qui indiquent d'utiliser la classe Abbrevia:
    http://www.developpez.net/forums/vie...&highlight=zip

    Seulement, lorsque j'essai de le faire, ça fonctionne bien pour 1 répertoire et sous-répertoire simple (de petite taille).

    Mais, lorsque je fais le test avec un répertoire et des sous répertoires plus conséquents (90Mo non compressé, qui, en principe, se compressent en 50Mo au bout d'1mn), j'ai l'impression que le prog boucle sans cesse, et si je jette un oeil au fichier en train de se créer, il oscile en permanence entre 0 et 50Mo (avec des retours réguliers à 0).

    Quelqu'un sait-il pourquoi ? et comment faire pour qu'il aboutisse au lieu de boucler sans fin.

    Voici l'adaptation que j'ai faite en partant de l'exemple d'Octal (post du forum) et de la doc d'Abbrevia:

    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
     
    procedure ZipMesFichiers();
    var AbZipKit : TAbZipKit;
    begin
      AbZipKit := TAbZipKit.create(nil);
      try
        AbZipKit.TempDirectory := 'z:\';
        AbZipKit.AutoSave      := true;
        AbZipKit.StoreOptions := [soRecurse] ; // paraît Ok, si ce n'est que ça ne finit jamais !!
        AbZipKit.OpenArchive('z:\essaiZip\mesEssai6.zip');
        // je veux zipper le répertoire repDeDepart et tous ses sous-répertoires
        AbZipKit.AddFiles('Z:\essaiZip\repDeDepart\*.*', 0);
        AbZipKit.CloseArchive;
      finally
        AbZipKit.Free;
      end;
    end;
    Par avance, merci de votre aide...

    Julien

  2. #2
    Membre averti
    Avatar de delphichem
    Inscrit en
    Octobre 2002
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 280
    Points : 338
    Points
    338
    Par défaut
    moi j'utilise Zipmaster depuis 3 ans
    http://www.delphizip.net/index.html
    Il fonctionne tres bien, alors n'hesites pas a l'utiliser

  3. #3
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 343
    Points : 536
    Points
    536
    Billets dans le blog
    2
    Par défaut Lien mort
    Citation Envoyé par delphichem Voir le message
    moi j'utilise Zipmaster depuis 3 ans
    http://www.delphizip.net/index.html
    Il fonctionne tres bien, alors n'hesites pas a l'utiliser

  4. #4
    Invité
    Invité(e)
    Par défaut
    je suppose qu'il s'agit de ce site, mais je ne connaissais pas.

  5. #5
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    Ce post date de 2005...OK mais si cela peut servir à quelqu'un :

    Delphi intègre la classe TZipFile dans l'unité system.zip qui permet de créer et d'ouvrir des fichiers zip. Il faut donc ajouter "zip" dans la clause uses.
    voici l'aide à ce sujet: http://docwiki.embarcadero.com/Libra...m.Zip.TZipFile

    Voici une partie de mon code.

    Je créé une liste qui contient tous les noms de fichiers que je souhaite mettre dans le zip et je lance un thread qui effectue cette tâche en fond avec possibilité d'abandon en cours..

    Voici le code de la procedure execute de mon thread:
    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
    83
    84
     
    //------------------------------------------------------------------------------------------------------------------------------
    Unit backup;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, Vcl.ExtCtrls, Zip, Vcl.FileCtrl,
      Vcl.ComCtrls, Vcl.CheckLst, common_Thread;
     
    type
      TBackupThread = class(TThread)
       protected
        procedure Execute; override;
      Public
        OkTerminate   : boolean;
        AbortRequested: boolean;
        ErrorCount    : integer;
        CurrentFileId : integer;
        Constructor Create(CreateSuspended:boolean);
      End;
    implementation
    {$R *.dfm}
    uses Ioutils,versions,common,ShlObj, ComObj, ActiveX ,config,FormDiagnostique,DateUtils;
     
    //------------------------------------------------------------------------------------------------------------------------------
    // TThreadBackup
    //------------------------------------------------------------------------------------------------------------------------------
    Constructor TBackupThread.Create(CreateSuspended:boolean);
    Begin
      inherited;
      OkTerminate   := false;
      AbortRequested:= false;
      ErrorCount    := 0;
      CurrentFileId := 0;
    End;
    //------------------------------------------------------------------------------------------------------------------------------
    procedure TBackupThread.execute;
    var
      zip : TZipFile;
      S, Msg, SrcPathAndName, NameInZip : string;
      i,p : integer;
      EmptyBytes: TBytes;
    Begin
      ErrorCount := 0;
      AbortRequested:=false;
      with BackupForm do
      Begin
        zip := TZipFile.Create;
        Zip.Open(FName, zmWrite);
        for i := 0 to FileList.Count-1 do
        Begin
          CurrentFileId := i;
          S := FileList.strings[i];
          p := pos('>',S);
          SrcPathAndName := copy(S,1,p-1);
          delete(S,1,p);
          NameInZip := S;
          try
            if (SrcPathAndName='') then
            Begin
               Msg := 'Adding directory '+NameInZip;
               FileDone.Add(Msg);
               Zip.Add(EmptyBytes,NameInZip, zcStored);  // it is a directory only, add the directory
            end else
            Begin
              Msg := 'Adding file '+SrcPathAndName;
              FileDone.Add(Msg);
              Zip.Add(SrcPathAndName, NameInZip);     // it is a file
            end;
            FileDone.Delete(FileDone.count-1);
            FileDone.Add(Msg+' --> done');
          except
            FileDone.Delete(FileDone.count-1);
            FileDone.Add('>>>>>> ERROR '+Msg);
            inc(ErrorCount);
          end;
          if AbortRequested then break;
        End;
        zip.free;
      End;
      OkTerminate := true;
    End;
    Franck

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 958
    Points
    40 958
    Billets dans le blog
    62
    Par défaut
    Bonsoir,

    ça m'étonnerai que julien.d passe encore dans le coin sa dernière activité remonte au 27/10/2009 le sujet du 09/08/2005 a été déterré, je suppose, uniquement pour indiqué un lien mort
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. comment créer un fichier d'aide .hlp
    Par agentmob dans le forum Windows XP
    Réponses: 2
    Dernier message: 26/05/2008, 14h35
  2. Comment créer un fichier d'aide (.chm) ?
    Par Anaz[o]rium dans le forum Outils
    Réponses: 9
    Dernier message: 18/11/2007, 14h12
  3. Réponses: 6
    Dernier message: 22/03/2007, 10h38
  4. [Access 2003]Comment créer un fichier aide?
    Par steeves5 dans le forum Access
    Réponses: 4
    Dernier message: 08/06/2006, 21h50

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