Recherche sur le blog

mercredi 20 février 2013

[WD17] Tutorial rapide – Créer une archive ZIP

Dans ce petit tutorial pour WinDev, nous allons rapidement voir comment créer très simplement une archive de type ZIP dans laquelle nous allons placer une série de fichiers. Deux méthodes différentes peuvent être utilisées : soit en manipulant une variable de type zipArchive, soit en désignant une archive par un nom quelconque (simple chaine de caractères).

Créer l’archive – Méthode 1

Nous allons utiliser ici une chaine de caractères qui contiendra le nom de l’archive à manipuler. N’importe quel texte peut être utilisé puisqu’il ne s’agit pas du nom de fichier final. Nous allons enregistrer ce dernier dans un répertoire quelconque de notre disque dur.

Arc1

En utilisant cette syntaxe de zipCrée, l’archive est automatiquement ouverte en lecture-écriture (en écriture uniquement pour une archive CAB) et est de type mono-volume. A noter que la fonction écrasera l’archive si elle existe déjà dans le répertoire cible. Alternative : utiliser “zipOuvre()” avec l’option “zipCréationSiInexistant”.

L’instruction conditionnelle ici-présente teste la valeur de retour de la fonction de création. Lorsqu’elle est égale à 0, cela signifie qu’il n’y a pas d’erreur. Dans le cas contraire, il faudra afficher ou tracer l’erreur dont on récupère le libellé grâce à “zipMsgErreur( <code erreur>”).

Créer l’archive – Méthode 2

La seconde méthode implique d’utiliser une variable de type zipArchive, comme nous l’avons déjà précisé dans l’introduction. Cette variable permet de manipuler un fichier d'archive correspondant à l'un des formats suivants : ZIP, CAB, RAR ou WDZ. Il possède plusieurs propriétés qui peuvent être assignées en WLangage.

Arc2

Dans l’exemple ci-dessus, nous déclarons notre variable. Nous modifions l’une de ses propriétés, à savoir le niveau de compression, qui est récupéré dans un sélecteur (le sélecteur renvoie des valeurs de 0 à 9 ; la plus grande représente le niveau de compression le plus élevé). On vérifie ensuite que le fichier n’existe pas déjà pour pouvoir effectuer un traitement dans une éventuelle instruction “Else”. Ensuite, nous appelons de nouveau la fonction “zipCrée.

Ajouter des fichiers

Deux méthodes sont envisageables :

  • Ajout d’un fichier.
  • Ajout d’un répertoire.

Cas d’un fichier :

Arc3

Ce qu’on fait :

  • On ajoute le fichier via “zipAjouteFichier()” en donnant comme paramètres : le nom de l’archive (ou la variable), le chemin complet du fichier à ajouter, et la portion du chemin à mémoriser (dans ce bout de code, nous ne conservons pas la structure – constante zipAucun).
  • On traite les erreurs.
  • On incrémente une jauge qui a été définie auparavant.

Cas d’un répertoire :

Arc4

Ce qu’on fait :

  • On ajoute le répertoire grâce à “zipAjouteRépertoire()”. Dans l’ordre, les paramètres sont : le nom de l’archive (ou bien la variable), le répertoire que l’on souhaite ajouter, et la portion du chemin à mémoriser (dans cette portion de code, nous avons choisi de mémoriser les différents répertoires qui constituent le chemin du fichier – constante zipRépertoire).
  • On traite les erreurs.

Retrouvez la description de chaque fonction, des exemples ainsi que l’ensemble des constantes utilisables dans la documentation officielle de PC SOFT, en suivant les liens ci-contre. Pour les répertoires | Pour les fichiers.

Fermer l’archive

Une fois les fichiers ajoutés, il faudra fermer l’archive, comme on ferme un fichier classique. Pour cela, appelez simplement la fonction “zipFerme()” et passez-lui en paramètre le nom de l’archive / la variable.

Supplément – Extraire un fichier

Pour décompresser un ou plusieurs fichiers, vous allez devoir faire appel à “zipExtraitFichier()”. Soit vous connaissez le nom du fichier à extraire (peut-être grâce à la fonction “zipListeFichier()”), soit vous connaissez son indice. Il sera également possible de déterminer où et comment seront extraits les fichiers : si on respecte l’arborescence enregistrée ou non par exemple.

Arc5

Le code ci-dessus effectue les actions suivantes : ouverture d’une archive en lecture uniquement. Ensuite, il extrait un fichier CSV dont on a mémorisé le nom dans une variable de type chaine. Par défaut, c’est la constante “zipRépertoire” qui est appliquée : cela a pour effet de décompresser dans le répertoire spécifié (ici, GP_sDossierDownloads) en restaurant l'arborescence du fichier (si elle a été mémorisée). Un bon conseil : testez bien le code de retour pour afficher une erreur claire à l’utilisateur de votre application !

Ceci clôture notre petit cours sur la manipulation d’archives avec WinDev. De nombreuses autres possibilités existent : protection par mot de passe, archive multi-volume, récupération des caractéristiques telles que la taille compressée d’un fichier contenu dans l’archive, et bien d’autres choses. Ainsi, comme nous avons l’habitude de vous le dire, n’hésitez pas à tester tout cela dans votre éditeur de code…

Aucun commentaire: