Page 1 sur 1

Utilisation de Winrar en ligne de commande

Publié : jeu. 10/févr./2005 22:42
par Le Soldat Inconnu
Salut,

un petit truc pour utiliser Winrar en ligne de commande, ça peut ête utile si vous voulez automatiser des opérations de compression avec PB.

cet exemple compresse en zip, mais c'est pareil pour le rar

Code : Tout sélectionner

Procedure.s GetProgramDirectory() ; Récupère le dossier d'exécution
  Protected Dossier.s
  Dossier = Space(255)
  GetCurrentDirectory_(255, @Dossier)
  If Right(Dossier, 1) <> "\" ; si l'adresse ne finit pas par "\"
    Dossier = Dossier + "\" ; on rajoute le "\"
  EndIf
  ProcedureReturn Dossier
EndProcedure

; On choisi le nom du zip
Zip.s = "Truc.Zip"
Zip = ReplaceString(Zip, " ", "_") ; je remplace les espaces par des "_" car c'est pour faire un fichier téléchargeables sur le net

; Ici, on crée la liste de fichier à zipper
If CreateFile(0, "zip.txt")
  ; on ajoute le nom des fichiers ou dossiers, tout est en relatif par rapport au dossier d'exécution de WinRar
  WriteStringN("Setup.exe")
  WriteStringN("Setup.ini")
  WriteStringN("Setup\*.*") ; pour les dossiers, on peut mettre un filtre. les dossiers vides ne seront pas ajoutés.
  CloseFile(0)
EndIf


If FileSize(Zip) >= 0 ; On supprime l'archive existante, car sinon, winrar ajoute les nouveaux fichiers sans enlever les anciens
  DeleteFile(Zip)
EndIf

RunProgram("C:\Program Files\WinRAR\WinRar.exe", "a -r -m5 " + Zip + " @zip.txt", GetProgramDirectory(), 1)

; Signification des paramètres
; a : ajout de fichier
; -r : ajout récursif pour les dossiers
; -m5 : meilleur taux de compression
; Zip : Nom du fichier zip a créé
; @Zip.txt : Fichier contenant la liste de fichier à zipper

; On supprime la liste de fichiers à zipper
DeleteFile("zip.txt")

Publié : ven. 11/févr./2005 23:17
par garzul
Pas mal LSI ;)

Publié : ven. 11/févr./2005 23:31
par Le Soldat Inconnu
merci monsieur :roll:

Publié : jeu. 09/févr./2006 13:45
par Eroan
Je te remercie pour ce code très bien fait. Il y a cependant des modifs à faire pour qu'il fonctionne, et en plus c'est moins restrictif :

Code : Tout sélectionner

DeleteFile("archive.zip")

Protected Dossier.s
Dossier = Space(255)
GetCurrentDirectory_(255, @Dossier)
If Right(Dossier, 1) <> "\" ; si l'adresse ne finit pas par "\"
Dossier = Dossier + "\" ; on rajoute le "\"
EndIf

fileinfo$ = "archive/"
If RunProgram("WinRAR.exe", "a -r -m5 archive.zip "+fileinfo$, Dossier, 1) ; on crée l'archive nommée archive.zip à partir du répertoire archive/
DeleteDirectory("archive", "*.*") ; puis on supprime le répertoire archive/

MessageRequester("Archive générée", "Le fichier archive.zip a été créé avec succès")

Else

MessageRequester("Erreur WinRAR", "Vous devez installer le logiciel WinRAR sur votre PC afin de générer l'archive. Il est disponible sur le site web 3w.telecharger.com!")
EndIf
Ca fait super pro la petite fenêtre WinRAR qui s'ouvre pour compresser ;)

Publié : jeu. 09/févr./2006 14:38
par Flype
Au fait, maintenant PB4 a la commande 'GetCurrentDirectory()'
:wink:

Publié : jeu. 09/févr./2006 20:47
par Eroan
Ouais mais moi j'en suis à la version PureBasic v3.94 (Windows - x86) PTDR :P