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

C Discussion :

Récupérer des noms de fichiers passés en arguments


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Récupérer des noms de fichiers passés en arguments
    Bonjour à tous,

    Je suis actuellement sur un projet qui travaille avec une liste d'arguments connue (que je traite avec la fonction getopt()) mais en plus de cela le programme doit pouvoir traiter le cas où l’utilisateur entre des noms de fichier (entre 0 et 2 fichiers).

    Donc l'idée c'est de récupérer ces éventuelles chaînes de caractères et les passer un fopen().

    Une petite aide là-dessus svp?

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 106
    Points
    43 106
    Par défaut
    Si j'ai bien compris, tu cherche a vérifier si tes arguments sont des fichier.
    Si c'est le cas, regardes du coté de stat.

    stat est spécifique à Linux, tu va avoir un équivalent sous Windows.

    Mais l'appel de fopen avec test et récupération de l'erreur si il y en a une répondra au besoin.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Salut, merci pour ta réponse.

    En fait avant de tester si les arguments sont des fichiers j'aimerais savoir s'il y a des arguments et si oui comment les récupérer?

    Pour l'instant voilà comment je gère mes options :

    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
    const struct option long_options[] = {
        { "optA", 0, NULL, 'a' },
        { "optB", 0, NULL, 'b' },
        { "optC", 0, NULL, 'c' },
        { "optD", 0, NULL, 'd' },
        { NULL, 0, NULL, 0 }
    };
    do {
        next_option=getopt_long (argc, argv, "abc:d:", long_options, NULL);
        switch(next_option){
            case 'a':
                flag_a = 1;
                break;
            case 'b':
                flag_b = 1;
                break;
            case 'c':
                argument1 = optarg;
                break;
            case 'd':
                argument2 = optarg;
                break;
        }
    }while(next_option!=-1);
    Voilà pour les arguments dont je connais la forme.
    Par contre dans mon cahier des charges le programme doit aussi pouvoir traiter le cas où l'utilisateur passe des arguments en plus. Comment puis-je détecter cela? En ajoutant un default : dans mon switch?

    EDIT :
    En postant le message j'ai eu une idée : implémenter un compteur qui s'incrémentera à chaque fois qu'un argument "attendu" sera détecté et le comparer à argc. Si le compteur est inférieur à argc, c'est que l'utilisateur a ajouté en fin de commande des noms de fichiers que je récupérerai avec argv[compteur].
    Je vais essayer d'implémenter ça pour voir si ça peut fonctionner mais je ne pense pas que ce soit la méthode recommandée, ça fait un peu "bricolage".

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Up !

    J'ai réussi à pondre un truc fonctionnel (cad qui rempli le cahier des charges) mais je ne sais pas si c'est optimisé.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #include <stdio.h>
    #include <getopt.h>
     
    void estPresent(int flag){
        if(flag)
            printf("present\n");
        else
            printf("absent\n");
    }
     
    int main(int argc, char **argv){
        const struct option long_options[] = {
            { "optA", 0, NULL, 'a' },
            { "optB", 0, NULL, 'b' },
            { "optC", 0, NULL, 'c' },
            { "optD", 0, NULL, 'd' },
            { NULL, 0, NULL, 0 }
        };
        int next_option, flag_a=0, flag_b=0, compteur=1;
        char *argument1="argument 1 par defaut", *argument2="argument 2 par defaut";
        do {
            next_option=getopt_long (argc, argv, "abc:d:", long_options, NULL);
            switch(next_option){
                case 'a':
                    flag_a = 1;
                    compteur++;
                    break;
                case 'b':
                    flag_b = 1;
                    compteur++;
                    break;
                case 'c':
                    argument1 = optarg;
                    compteur+=2;
                    break;
                case 'd':
                    argument2 = optarg;
                    compteur+=2;
                    break;
            }
        }while(next_option!=-1);
        printf("Flag a ");
        estPresent(flag_a);
        printf("Flag b ");
        estPresent(flag_b);
        printf("%s\n", argument1);
        printf("%s\n", argument2);
        if(compteur<argc){
            printf("fichier 1 : %s\n", argv[compteur]);
            if(compteur+1<argc)
                printf("fichier 2 : %s\n", argv[compteur+1]);
        }
    }
    Qu'est-ce que vous en pensez?

Discussions similaires

  1. [RegEx] Récupérer des noms de fichier
    Par le_viking dans le forum Langage
    Réponses: 3
    Dernier message: 27/03/2013, 01h26
  2. Récupérer des noms de fichier dans une table pour les placer en masque du tfilelist
    Par charliplanete dans le forum Développement de jobs
    Réponses: 11
    Dernier message: 24/08/2011, 17h16
  3. Récupérer des noms de fichiers dans une table ?
    Par florus dans le forum Access
    Réponses: 5
    Dernier message: 25/03/2006, 17h34
  4. Réponses: 2
    Dernier message: 21/02/2006, 10h36
  5. récupérer des nom de fichiers en utilisant *.ext
    Par drinkmilk dans le forum ASP
    Réponses: 11
    Dernier message: 15/12/2004, 09h21

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