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 :

Programme équivalent à DIR [Débutant(e)]


Sujet :

C

  1. #21
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Merci mais j'ai toujours pas compris ce que prend fstat comme paramètres pour dire si c'est un dossier ou un fichier. En tout cas, avec ce qu'on m'a donné sur ce sujet j'ai réussi à faire fonctionner ceci :

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <errno.h>
    int is_dir(char *name);
    void usage(char *name)
    {
       printf("Usage : %s [directory]\n", name);
    }
    int lister(char *directory)
    {
       DIR *dir = NULL;
       struct dirent *file = NULL;
       if((dir = opendir(directory)) == NULL)
       {
          return EXIT_FAILURE;
       }
       printf("Repertoire %s :\n", directory);
     
       while((file = readdir(dir)) != NULL)
       {
          if(strcmp(file->d_name, ".") && strcmp(file->d_name, ".."))
          {
             if(is_dir(directory)==1)
             {
                lister(strncat(directory, file->d_name, 256));
             }
             else
             {
                printf("\t%s\n", file->d_name);
             }
          }
       }
     
       printf("Fin repertoire %s\n", directory);
     
       closedir(dir);
     
       return EXIT_SUCCESS;
    }
    int main(int argc, char **argv)
    {
       char directory[256];
     
       fgets(directory, sizeof directory, stdin);
     
       lister(directory);
     
       puts("");
     
       system("PAUSE");
     
       return 0;
    }
    int is_dir(char *name)
    {
        DIR *dir = NULL;
        int ret = 0;
     
        dir = opendir(name);
        if(dir == NULL && errno == ENOTDIR)
        {
            ret = 0;
        }
        else
        {
            closedir(dir);
            ret = 1;
        }
     
        return ret;
    }
    Ce n'est pas de moi (sauf quelques modifications) car je veux d'abord comprendre avant de construire.

    Je tape : C:\Dev-Cpp et il m'affiche le texte retourné par pause et il quitte Comment régler ceci ?

    Merci d'avance

  2. #22
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par _SamSoft_ Voir le message
    Merci mais j'ai toujours pas compris ce que prend fstat comme paramètres pour dire si c'est un dossier ou un fichier.
    Utilise stat.
    http://man.developpez.com/man2/stat.2.php

    C'est pourtant explicite le fonctionnement nan ?
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #23
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Bon, j'ai compris ce que je dois utiliser mais comment (ca rien à faire, j'ai toujours pas compris). Plutôt que d'essayer de jouer au Harry Potter de l'informatique, je post encore une fois :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <dirent.h>
    #include <errno.h>
    void usage(char *name);
    int lister(char *directory);
    int main(int argc, char **argv)
    {
        struct stat infos;
        char directory[256];
     
       fgets(directory, sizeof directory, stdin);
     
       if(S_ISDIR(infos.st_mode)==0)
       {
                                printf("folder");
       }
       else
       {
           printf("file");
       }
     
       puts("");
     
       system("PAUSE");
     
       return 0;
    }
    Pouvez - vous me donner un code avec stat permettant de vérifier si c'est un dossier ou un fichier. (Tout ceci ne rentre pas dans le cadre de mes études).

    Merci d'avance

  4. #24
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par _SamSoft_ Voir le message
    Bon, j'ai compris ce que je dois utiliser mais comment (ca rien à faire, j'ai toujours pas compris).
    C'est pas en répétant inlassablement "j'ai pas compris" que tu vas mieux comprendre. La démarche est toujours la même :
    • fonction nouvelle :
      1. lire la doc
      2. expérimenter
    Alors, c'est où que tu appelles stat() ?
    Pas de Wi-Fi à la maison : CPL

  5. #25
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Je ne sais pas où trouver la doc.
    Je cherche des exemples de codes utilisant stat (je vais voir sur votre site)

  6. #26
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par _SamSoft_ Voir le message
    Je ne sais pas où trouver la doc.
    Je cherche des exemples de codes utilisant stat (je vais voir sur votre site)
    On ne t'a pas donné ce lien 3000 fois ?

    http://man.developpez.com ?

    faut peut être pas nous prendre pour des crétins, non plus...
    Pas de Wi-Fi à la maison : CPL

  7. #27
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Je ne prend personne pour un crétin !
    J'ai lu au moins 3 bonnes fois cela mais je cherche toujours à indiquer le chemin du fichier ou dossier à la structur stat or je ne vois pas comment !

    Avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int stat(const char *file_name, struct stat *buf);
    Donc comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    stat(directory, myStruct); /* J'ai pas compris le second param */
    Et ensuite, comment voir si c'est un dossier, j'ai S_ISDIR(m) mais je sais pas comment l'utiliser ?!

    Et pourquoi sous Linux alors que je suis sous Windows ?

  8. #28
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par _SamSoft_ Voir le message
    J'ai lu au moins 3 bonnes fois cela mais je cherche toujours à indiquer le chemin du fichier ou dossier à la structur stat or je ne vois pas comment !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int stat(const char *file_name, struct stat *buf);
    Donc comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    stat(directory, myStruct); /* J'ai pas compris le second param */
    Tu ne sais pas définir une structure et passer son adresse à une fonction ?
    Et ensuite, comment voir si c'est un dossier, j'ai S_ISDIR(m) mais je sais pas comment l'utiliser ?!
    La structure contient des champs. Il faut lire la doc pour savoir lequel indique la nature de l'entrée. Ensuite, en appliquant la macro S_IFDIR() à cette valeur, on sait si c'est un répertoire ou non... Tout est écrit, je ne vois pas trop où est le problème... Ca change des mangas, c'est sûr...
    Et pourquoi sous Linux alors que je suis sous Windows ?
    Je t'ai indiqué un lien en français. Oui, il est 'orienté Linux', mais c'est une fonction POSIX.1. Elle est aussi implémentée sous Windows.

    Si tu préfères la définition officielle, c'est ici :

    http://www.opengroup.org/onlinepubs/...ions/stat.html
    Pas de Wi-Fi à la maison : CPL

  9. #29
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Entendu. Pour infos, je ne lis pas de mangas (je n'aime pas ca)

    En fait ce que je n'ai pas comrpis c'est comment utiliser S_ISDIR(m), je sais qu'il faut utiliser des macros mais comment ? (un petit lien vers les macros ?)

    Edit: Ne me dites rien, je cherche

  10. #30
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par _SamSoft_ Voir le message
    En fait ce que je n'ai pas comrpis c'est comment utiliser S_ISDIR(m), je sais qu'il faut utiliser des macros mais comment ? (un petit lien vers les macros ?)
    Ici, c'est juste une macro que tu appelles avec la valeur du champ de la structure. Elle retourne non-zéro si c'est un répertoire, ou 0 si ce n'en est pas un... C'est mystérieux ?

    Alors ce code, ça vient ?
    Pas de Wi-Fi à la maison : CPL

  11. #31
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Ici, c'est juste une macro que tu appelles avec la valeur du champ de la structure. Elle retourne 1 si c'est un répertoire, ou 0 si ce n'en est pas un... C'est mystérieux ?

    Alors ce code, ça vient ?
    Je devais me nourrir !

    Dans la page c'est pourtant marqué : 0 si la condition est vrai or si S_DIR retourne 0 alors c'est un répertoire

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <dirent.h>
    #include <errno.h>
    void usage(char *name);
    int lister(char *directory);
    int main(int argc, char **argv)
    {
        struct stat infos;
        char directory[256];
     
       fgets(directory, sizeof directory, stdin);
       int rslt;
       rslt = S_ISDIR(infos.st_mode);
       if(rslt==0)
       {
                                printf("folder");
       }
       else
       {
           printf("file");
       }
     
       puts("");
     
       system("PAUSE");
     
       return 0;
    }
    void usage(char *name)
    {
       printf("Usage : %s [directory]\n", name);
    }
    int lister(char *directory)
    {
       DIR *dir = NULL;
       struct dirent *file = NULL;
       if((dir = opendir(directory)) == NULL)
       {
          return EXIT_FAILURE;
       }
       printf("Repertoire %s :\n", directory);
     
       while((file = readdir(dir)) != NULL)
       {
          if(strcmp(file->d_name, ".") && strcmp(file->d_name, ".."))
          {
             if(1)
             {
                lister(strncat(directory, file->d_name, 256));
             }
             else
             {
                printf("\t%s\n", file->d_name);
             }
          }
       }
     
       printf("Fin repertoire %s\n", directory);
     
       closedir(dir);
     
       return EXIT_SUCCESS;
    }
    Compile (enfin je vais ajouter les paramètres que vous recommendez) mais ne fait toujours rien. (toujours : folder)

  12. #32
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par _SamSoft_ Voir le message
    Dans la page c'est pourtant marqué : 0 si la condition est vrai or si S_DIR retourne 0 alors c'est un répertoire
    [Edit] Bah, la norme POSIX.1 dit le contraire. Relis ta doc, a mon avis, tu l'as lue de travers...
    Compile (enfin je vais ajouter les paramètres que vous recommendez) mais ne fait toujours rien. (toujours : folder)
    Mais tu n'appelles toujours pas stat(). C'est trop compliqué pour toi ou quoi ?
    De plus, je rappelle que fgets() laisse le '\n' final... On a pas passé de heures à expliquer fclean() ? C'est désespérant. On dirait qu'on parle aux murs...

    Une fois mis au point :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    main.c
    main.c is a file
     
    Press ENTER to continue.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ..
    .. is a folder
     
    Press ENTER to continue.
    Ca roxx...
    Pas de Wi-Fi à la maison : CPL

  13. #33
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Je l'avais déjà lu au moins 3fois ! (maintenant 4) :

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <dirent.h>
    #include <errno.h>
    void usage(char *name);
    int lister(char *directory);
    int main(int argc, char **argv)
    {
        struct stat *infos;
        char directory[256];
     
       fgets(directory, sizeof directory, stdin);
     
       stat(directory, infos);
     
       int rslt;
       rslt = S_ISDIR(infos->st_mode);
     
       if(rslt==0)
       {
                                printf("folder");
       }
       else
       {
           printf("file");
       }
     
       puts("");
     
       system("PAUSE");
     
       return 0;
    }
    void usage(char *name)
    {
       printf("Usage : %s [directory]\n", name);
    }
    int lister(char *directory)
    {
       DIR *dir = NULL;
       struct dirent *file = NULL;
       if((dir = opendir(directory)) == NULL)
       {
          return EXIT_FAILURE;
       }
       printf("Repertoire %s :\n", directory);
     
       while((file = readdir(dir)) != NULL)
       {
          if(strcmp(file->d_name, ".") && strcmp(file->d_name, ".."))
          {
             if(1)
             {
                lister(strncat(directory, file->d_name, 256));
             }
             else
             {
                printf("\t%s\n", file->d_name);
             }
          }
       }
     
       printf("Fin repertoire %s\n", directory);
     
       closedir(dir);
     
       return EXIT_SUCCESS;
    }
    J'avais effectivement oublié de mettre stat (je croyais qu'il y était) mais toujours ce folder

    EDIT: Je vais mettre des fclean, je viens de comprendre à quoi ca servait -_-
    Pour le moment tout est le main c'est juste pour les "tests" après je coupe ceci en fichier(s) .h et .c

  14. #34
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Ohlala.

    Et elle est où la mémoire pour ta structure stat.

    C'est pas parce que tu vois une * dans un prototype qu'il faut toi aussi déclaré un pointeur.

    Essaye donc de déclarer une structure de type stat normalement et de passer son adresse à stat. Tu vas voir c'est magique.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  15. #35
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Merci, après correction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     struct stat infos;
        char directory[256];
     
       fgets(directory, sizeof directory, stdin);
     
       stat(directory, &infos);
    Mais toujours le même problème (je vais ajouter les fclean)

  16. #36
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par _SamSoft_ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        struct stat *infos;
        char directory[256];
     
       fgets(directory, sizeof directory, stdin);
     
       stat(directory, infos);
    Refléchis avant de coder. C'est n'importe quoi. Tu passes une valeur indéterminée à une fonction?. Le comportement est indéterminé. Et regarde les warnings du compilateurs avant d'exécuter...

    C'est pas faute de t'avoir mis sur la voie...
    Citation Envoyé par -ed-
    Tu ne sais pas définir une structure et passer son adresse à une fonction ?
    EDIT: Je vais mettre des fclean, je viens de comprendre à quoi ca servait -_-
    y'a intérêt...
    Pour le moment tout est le main c'est juste pour les "tests" après je coupe ceci en fichier(s) .h et .c
    rien ne presse...
    Pas de Wi-Fi à la maison : CPL

  17. #37
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <dirent.h>
    #include <errno.h>
    #include "myHeader.h"
    int lister(char *directory);
    int main(int argc, char **argv)
    {
        struct stat infos;
        char directory[256];
     
       fgets(directory, sizeof directory, stdin);
       fclean(directory, stdin);
     
       stat(directory, &infos);
     
       int rslt;
       rslt = S_ISDIR(infos.st_mode);
     
       if(rslt==0)
       {
                                printf("folder");
       }
       else
       {
           printf("file");
       }
     
       fprintf(stdout, "\n");
       system("PAUSE");
       return 0;
    }
    int lister(char *directory)
    {
       DIR *dir = NULL;
       struct dirent *file = NULL;
       if((dir = opendir(directory)) == NULL)
       {
          return EXIT_FAILURE;
       }
       printf("Repertoire %s :\n", directory);
     
       while((file = readdir(dir)) != NULL)
       {
          if(strcmp(file->d_name, ".") && strcmp(file->d_name, ".."))
          {
             if(1)
             {
                lister(strncat(directory, file->d_name, 256));
             }
             else
             {
                printf("\t%s\n", file->d_name);
             }
          }
       }
     
       printf("Fin repertoire %s\n", directory);
     
       closedir(dir);
     
       return EXIT_SUCCESS;
    }
    Bon, si vous pouviez un peu plus me mettre sur la voie (je sais que je suis une sorte de boulet mais je m'en fous, ce que je veux c'est apprendre et comprendre pourquoi ca ne marche pas ! )

  18. #38
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par _SamSoft_ Voir le message
    Merci, après correction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     struct stat infos;
        char directory[256];
     
       fgets(directory, sizeof directory, stdin);
     
       stat(directory, &infos);
    Mais toujours le même problème (je vais ajouter les fclean)
    Il faut prendre le temps de vérifier le fonctionnement de la macro.

    1 - La norme :
    http://www.opengroup.org/onlinepubs/...ys/stat.h.html
    2 - La macro :
    Citation Envoyé par POSIX.1
    The following macros shall be provided to test whether a file is of the specified type. The value m supplied to the macros is the value of st_mode from a stat structure. The macro shall evaluate to a non-zero value if the test is true; 0 if the test is false.

    <...>
    S_ISDIR(m)
    Test for a directory.
    <...>
    C'est clair, non ? Donc j'avais bien raison. Je modifie mon post.
    Pas de Wi-Fi à la maison : CPL

  19. #39
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par _SamSoft_ Voir le message
    Bon, si vous pouviez un peu plus me mettre sur la voie (je sais que je suis une sorte de boulet mais je m'en fous, ce que je veux c'est apprendre et comprendre pourquoi ca ne marche pas ! )
    C'est parce que tu ne sais pas lire la doc...
    Pas de Wi-Fi à la maison : CPL

  20. #40
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    L'utilisation de la macro S_ISDIR(m) n'est pas bonne alors -_-

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(S_ISDIR(infos.st_mode)==0)
       {
                                printf("files");
       }
       else
       {
           printf("folder");
       }
    Je vois bien la doc mais dans la version que m'a passé skyrunner j'ai 0 si TRUE ?!

    Comment dois-je utiliser la macro ?

    Ces fonctions retournent zéro si elles réussissent. En cas d'echec -1 est renvoyé, et errno contient le code d'erreur.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 7 PremièrePremière 123456 ... DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/05/2010, 13h56
  2. [Programmation]Faire du COM/OLE sous Linux ou équivalence
    Par randriano dans le forum Applications et environnements graphiques
    Réponses: 13
    Dernier message: 12/06/2008, 08h51
  3. Réponses: 3
    Dernier message: 14/08/2006, 22h08
  4. [EDI] Outil de programmation PHP équivalent à VSS
    Par bourvil dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 23/02/2006, 16h18

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