Fermer2
deleted2Le 16/10/2010 à 12:48
Je suis en train d'écrire un archiveur en ligne de commande pour PedroM.

J'aimerais vos idées pour le design, même si je pense avoir fait la majeure partie du boulot maintenant :
Par



Syntax        par [options] [archive à traiter] [liste de fichiers]



Options

-a,--add
        Ajoute les fichiers à l'archive. Crée l'archive si elle n'existe pas.
        Si l'archive existe en flash, elle est désarchivée et réarchivée à la fin.
        Défaut:
        - N'enregistre pas le chemin absolu des fichiers.
        - Si un fichier du même nom existe dans l'archive, renvoie une erreur.


-e,--extract
        Désarchive les fichiers spécifiés dans la liste.
        Défaut:
        - Utilise le chemin absolu des fichiers s'il existe dans l'archive, sinon extrait dans le répertoire courant.
        - Désarchive les fichiers spécifiés dans la liste, sinon désarchive tous les fichiers.
        - Si un fichier à désarchiver existe déjà, renvoie une erreur.


-r,--remove
        Détruit les fichiers dans une archive. Désarchive l'archive si elle est en flash et l'y remet à la fin.


-l,--list
        Affiche des informations sur une archive et sur les fichiers contenus.
        Défaut: affiche les informations de tous les fichiers (nom, taille, type), sauf si une liste est spécifiée.


-f,--flash
        Si on crée une archive, elle est mise en flash à la fin de l'opération.
        Si on extrait des fichiers, ils sont mis en flash au fur et à mesure.


-s,--save-path
        Enregistre le chemin absolu des fichiers ajoutés à une archive. Si aucun path n'est spécifié pour un fichier,
        le répertoire courant est enregistré.


-d,--dir <fld>
        Extrait les fichiers listés/tous les fichiers dans le répertoire fld, sans tenir compte de l'éventuel chemin
        enregistré. '.' signifie 'répertoire courant'.
        Défaut:
        - renvoie une erreur si le répertoire n'existe pas.


-F,--force
        Ecrase les fichiers dans une archive quand on veut y ajouter un fichier déjà présent.
        Ecrase les fichiers existants quand on désarchive des fichiers.
        Crée automatiquement le répertoire fld de l'option -d si le répertoire n'existe pas.


-c,--continue
        En cas d'erreur non fatale (fichier existant et pas d'option -f spécifiée, fichier inexistant,
        nom invalide etc...), ignore le fichier et passe au suivant.
        

-v,--verbose
        Mode verbeux sur stdout.
        Défaut:
        - Par ne renvoie que les erreurs sur stderr.


-h,--help
        Affiche une aide sur les différentes options.


Notes
        - Les archives sont créées en RAM.
        - Les fichiers sont extraits en RAM.
        - Les fichiers sont ajoutés dans une archive sans information de path.
        - Les fichiers sont extraits en utilisant l'information de path si elle existe, sinon dans le répertoire courant.
        - Si --add/--extract/--remove/--list sont spécifiés, le dernier switch passé est utilisé, les autres ignorés.
        - Si des options incohérentes sont spécifiées (par exemple, --force quand on liste une archive), elles sont ignorées silencieusement.

Voilà, toutes vos idées et critiques sont les bienvenues.

Merci déjà à Zerosquare pour les siennes et la lecture de mon code (le programme est déjà capable de créer une archive, d'y mettre des fichiers, tout ce qui est chemin absolu ou non est géré, ainsi que les archivages/désarchivages nécessaires).

ps -> Je voudrais que Par signifie "PedroM Archiver". J'avais déjà fait ça pour Pexec, avant de me poser une question : quid d'utiliser un nom de programme dont je ne possède pas le copyright dans le mien ? PpHd saura sûrement me répondre. cheeky C'est en fait pour ça que j'avais renommé Pexec en EExec, même si PpHd n'avait rien dit... bref je ne veux pas faire de pas de travers niveau droit/license/toussa.

ps2 -> Par utilise une petite lib perso, Pdtlib (~15 fonctions pour le moment), qui m'aide énormément à gérer de tels softs : trouver/créer/archiver/déasrchiver les fichiers, lire le fichier de configuration du soft au boot (system\par), mais aussi gérer la ligne de commande. L'API de la fonction qui le fait n'a pas changé depuis ce que j'ai écrit sur mon blog, pourtant elle gère maintenant les options longues et courtes de manière tout aussi simplissime pour le programmeur, merci à Zerosquare pour cette idée-là aussi. happy


Voilà, j'attends vos critiques. smile