compression d'un dossier avec ActivePerl

compression d'un dossier avec ActivePerl - Perl - Programmation

Marsh Posté le 21-05-2008 à 15:21:30    

bonjour a tous et merci pour le futur coup de main...
 
je cherche à ziper un dossier contenant des fichiers ou sous dossier. je suis allé voir sur CPAN et j'y ai trouvé ce bout de code:
 

Code :
  1. # Create a Zip file
  2.    use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
  3.    my $zip = Archive::Zip->new();
  4.  
  5.    # Add a directory
  6.    my $dir_member = $zip->addDirectory( 'dirname/' );


 
j'ai tenté de bidouillé tout ca à ma sauce, mais sans résultat. et puis jdois dire que jcomprendrais mieu une vache espagnole :s

Reply

Marsh Posté le 21-05-2008 à 15:21:30   

Reply

Marsh Posté le 21-05-2008 à 15:32:41    

il te manque ce bout là ( pour "sauver" ton archive ):

Code :
  1. # Save the Zip file, Save the world
  2.   unless ( $zip->writeToFileNamed('someZip.zip') == AZ_OK ) {
  3.        die 'write error';
  4.   }


Et hop tout devrait marcher [:dawa]


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 21-05-2008 à 15:38:02    

jte te remercie, le fichier .zip se crée.  
Malheureusement il ne m'écrit rien dedans, je ne comprend pas car le chemin que j'indique est bon...


Message édité par warzoo le 21-05-2008 à 15:48:27
Reply

Marsh Posté le 21-05-2008 à 16:29:54    

si tu lisais la doc tu serais pas surpris:

Citation :

addDirectory( $directoryName [, $fileName ] )
    Append a member created from the given directory name. The directory name does not have to name an existing directory. If the named directory exists, the file modification time and permissions are set from the existing directory, otherwise they are set to now and permissive default permissions. $directoryName must be in local file system format. The optional second argument sets the name of the archive member (which defaults to $directoryName). If given, it must be in Zip (Unix) format. Returns the new member.


Je suppose qu'en fait tu voulais utiliser addTree
Mais regarde donc sur les perlmonks comment faire proprement (il utilise treeMatching au lieu de tree tout court pour tester l'extension gif mais tu peux t'en passer).
 
note: pas de MP lolkthxbye


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 21-05-2008 à 16:39:49    

merci, et dsl mais moi et l'anglais c'est une histoire bien compliqué...
 
d'un autre coté, si jtouché en perl et en anglais j'aurais pas besoin de poser des question!
 
et puis jveux pas dire mais si c'etait bien expliqué dans les api jgalèrerai moins...


Message édité par warzoo le 21-05-2008 à 16:54:24
Reply

Marsh Posté le 22-05-2008 à 00:05:35    

Bon, un peu de code valant mieux qu'un long discours...

Code :
  1. # Zip archive format
  2. use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
  3. .......................
  4. my $zipfile = Archive::Zip->new();
  5. my $zipfile_member = $zipfile->addFile( $file, $name.".jpg" );
  6. $zipfile_member->desiredCompressionMethod( COMPRESSION_STORED );
  7. my $zipfilename = "archive.zip";
  8. unless ( ($zipfile->writeToFileNamed( $zipfilename )) == AZ_OK) {
  9. trace_msg("Error", "Cannot create file $zipfilename" ) and return 0;
  10. }

avec mon exemple:
D'abord on crée l'archive: Archive::Zip->new();  
On ajoute des fichiers a l'archive: $zipfile->addFile( $file, $name.".jpg" );  
le premier parametre: le fichier a ajouter, et le second, le nom que le fichier aura dans l'archive
Attention, a ce stade, on ne fait que ajouter les infos dans une liste, la compression effective a lieu uniquement quand on sauve l'archive
On peut alors aussi indiquer quel type de compression on desire.
Pour un fichier image deja compressé, utiliser desiredCompressionMethod( COMPRESSION_STORED ); sinon, on aura la compression par defaut.
Bon, on ajoute d'autres fichiers, puis, on sauve l'archive: $zipfile->writeToFileNamed( $zipfilename )
A ce stade, il faut que tous les fichiers ajoutés dans l'archive avec addFile existent, car c'est en fait maintenant que la compression va être effectuée.
 
Ensuite, si tu veux ajouter le contenu d'un repertoire, etc, il faut, comme te l'indiquais anapajari aller voir du coté de addTree.  
A+,


Message édité par gilou le 22-05-2008 à 00:06:07

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 22-05-2008 à 11:17:36    

mdr, vous etes sympa les gars de faire état de votre science mais si vous répondez à chaque fois à coté de ma question, c'est pas trés utile.
j'ai déjà était voir pour addTree et jsuis pas plus avancé qu'avant.
et en plus quand je rajoute la méthode de compression il me dit qu'on peut pas faire appel a la methode sans package, j en ai essayé différents mais sans résultats.

Reply

Marsh Posté le 22-05-2008 à 11:22:10    

warzoo a écrit :

mdr, vous etes sympa les gars de faire état de votre science mais si vous répondez à chaque fois à coté de ma question, c'est pas trés utile.


ok! Alors quelle est la question exactement?


Message édité par anapajari le 22-05-2008 à 11:22:24

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed