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 :

Décompression de .tar et .tar.gz


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Points : 182
    Points
    182
    Par défaut Décompression de .tar et .tar.gz
    Bonjour,
    Pour mon appli je recois en entree un fichier .tar
    Ma premiere question est comment détarrer ce fichier?
    une fois détarré, j'obtiendrai un fichier tar.gz que je dois decompresser aussi pour recupérer les fichiers csv qu il contient.

    En fait, je sais qu'il y a Zlib mais je n'arrive pas a l'utiliser, j'ai le code suivant
    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
    procedure TDB_zlib.DecompressFiles(const Filename, DestDirectory : String);
    var
      dest,s : String;
      decompr : TDecompressionStream;
      infile, outfile : TFilestream;
      i,l,c : Integer;
    begin
      // IncludeTrailingPathDelimiter (D6/D7 only)
      dest := IncludeTrailingPathDelimiter(DestDirectory);
     
      infile := TFileStream.Create(Filename,fmOpenRead);
      try
        { number of files }
        infile.Read(c,SizeOf(c));
        for i := 1 to c do
        begin
          { read filename }
          infile.Read(l,SizeOf(l));
          SetLength(s,l);
          infile.Read(s[1],l);
          { read filesize }
          infile.Read(l,SizeOf(l));
          { decompress the files and store it }
          s := dest+s; //include the path
          outfile := TFileStream.Create(s,fmCreate);
          decompr := TDecompressionStream.Create(infile);
          try
            outfile.CopyFrom(decompr,l);
          finally
            outfile.Free;
            decompr.Free;
          end;
        end;
      finally
        infile.Free;
      end;
    end;
    mais a l'execution j'ai un probleme avec la fonction :
    ça boucle et j'obtiens l'erreur "Mémoire insuffisante"

    Comment m'y prendre pour decompresser ces fichiers?

    Merci d'avance
    Mike

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 726
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Citation Envoyé par mike600river Voir le message
    Bonjour,
    Pour mon appli je recois en entree un fichier .tar
    Ma premiere question est comment détarrer ce fichier?
    une fois détarré, j'obtiendrai un fichier tar.gz que je dois decompresser aussi pour recupérer les fichiers csv qu il contient.
    T'es sûr de ça ?
    D'habitude c'est l'inverse, ie, on reçoit un .tar.gz qu'on "gunzip -d" (sous Le pingouin), ce qui va donner un .tar.
    Enfin, c'est ce que j'ai vu pendant des années...
    Rappel : gunzip (dé-)compresse, tar se contente de créer un seul fichier à partir d'une arborescence, ou l'inverse.

    Pour le reste, pas la moindre idée.
    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    en effet, "tar" est utilisé pour mettre tous les fichiers dans un seul flux (.tar) qui est passé à la compression GZIP (.tar.gz)...je ne pense pas que l'enchainement puisse être réalisé dans l'autre sens.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Points : 182
    Points
    182
    Par défaut
    aucun soucis sur les formats:
    g un toto.tar qui une fois detarré contient un titi.tar.gz, qui une fois decompressé, contient mes 3 fichiers a traiter.

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 726
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Citation Envoyé par mike600river Voir le message
    g un toto.tar qui une fois detarré contient un titi.tar.gz, qui une fois decompressé, contient mes 3 fichiers a traiter.
    Donc le toto.tar ne sert à rien.
    Et le titi.tar.gz une fois décompressé va donner un titi.tar à détarrer, à moins que tu décompresses et détarres en une seule passe.
    C'est bien ça ?
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Points : 182
    Points
    182
    Par défaut
    Donc le toto.tar ne sert à rien.
    En effet, il ne sert a rien mais je dois quand meme le detarrer pour obtenir le dossier toto qui contient titi.tar.gz

    Pour le titi.tar.gz, quand je le decompresse avec winzip ou powerarchiver, j'obtiend directement un dossier titi qui contient mes 3 fichiers a traiter.

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 726
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 726
    Points : 15 126
    Points
    15 126
    Par défaut
    Bon,

    Maintenant qu'on y voit clair avec l'organisation de ton/tes fichier(s),
    Citation Envoyé par mike600river Voir le message
    En fait, je sais qu'il y a Zlib mais je n'arrive pas a l'utiliser
    as-tu pensé à utiliser l'ami google ? "zlib +delphi" = 261 000 réponses !
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Points : 182
    Points
    182
    Par défaut
    C'est apeu pres la premiere chose que j ai faite et en essayant voila ce que j ai reussi a ontenir:
    c'est un large extrait de mon premier post

    En fait, je sais qu'il y a Zlib mais je n'arrive pas a l'utiliser, j'ai le code suivant
    Code :

    procedure TDB_zlib.DecompressFiles(const Filename, DestDirectory : String);
    var
    dest,s : String;
    decompr : TDecompressionStream;
    infile, outfile : TFilestream;
    i,l,c : Integer;
    begin
    // IncludeTrailingPathDelimiter (D6/D7 only)
    dest := IncludeTrailingPathDelimiter(DestDirectory);

    infile := TFileStream.Create(Filename,fmOpenRead);
    try
    { number of files }
    infile.Read(c,SizeOf(c));
    for i := 1 to c do
    begin
    { read filename }
    infile.Read(l,SizeOf(l));
    SetLength(s,l);
    infile.Read(s[1],l);
    { read filesize }
    infile.Read(l,SizeOf(l));
    { decompress the files and store it }
    s := dest+s; //include the path
    outfile := TFileStream.Create(s,fmCreate);
    decompr := TDecompressionStream.Create(infile);
    try
    outfile.CopyFrom(decompr,l);
    finally
    outfile.Free;
    decompr.Free;
    end;
    end;
    finally
    infile.Free;
    end;
    end;

    mais a l'execution j'ai un probleme avec la fonction :
    Code :

    infile.Read(s[1],l);

    ça boucle et j'obtiens l'erreur "Mémoire insuffisante"

Discussions similaires

  1. décompression ciblée d'archives .tar.bz2
    Par apidou dans le forum Linux
    Réponses: 1
    Dernier message: 30/12/2011, 10h37
  2. Créer un fichier.tar ou .tar.gz
    Par Marty000 dans le forum Documents
    Réponses: 2
    Dernier message: 28/11/2006, 14h03
  3. Logiciel pour décompresser un fichier .TAR
    Par Mousk dans le forum Autres Logiciels
    Réponses: 8
    Dernier message: 12/03/2006, 19h52
  4. Réponses: 4
    Dernier message: 12/01/2006, 18h53
  5. Réponses: 1
    Dernier message: 23/10/2002, 13h40

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