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 :

Erreur incomprise sur le d_type [Non suivi]


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Erreur incomprise sur le d_type
    Bonjour.

    J'ai copier le code de ce lien : http://c.developpez.com/sources/c/?p...FICHIER_lister
    qui permet de lister les dossiers et sous-dossiers.
    Quand je le compile, dev-cpp me donne une erreur sur le d_type. Comme quoi il n'est pas reconnu.
    C:\Documents and Settings\Ordinateur\Bureau\SansNom1.cpp In function `int lister(char*)':
    28 C:\Documents and Settings\Ordinateur\Bureau\SansNom1.cpp 'struct dirent' has no member named 'd_type'
    28 C:\Documents and Settings\Ordinateur\Bureau\SansNom1.cpp `DT_DIR' undeclared (first use this function)
    (Each undeclared identifier is reported only once for each function it appears in.)
    J'include bien les fichiers qu'il faut, et je ne pense pas qui manque quoique ce soit au code.

    Si vous avez une idée d'ou ça pourrait venir, je suis preneur.

    Lowboy

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Essaie d'ajouter un


  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Sous Windows avec Dev-C++ (MinGW) ?

    Edit: En effet, il semblerait que la version MinGW de dirent soit une structure simplifiée.
    Enfin, cette version-là date de 2004, je n'ai pas la dernière version de dirent.h sous la main...

  4. #4
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut réponse
    Merci d'avoir répondu.

    PRomu@ld, j'ai tester ça n'a pas fonctionné.

    Médinoc, j'ai modifier le dirent.h avec celui que tu m'a donné mais ça ne fonctionne pas, j'ai la même erreur. En effet il semblerait qu'à la base, sous dev-c++ dirent.h n'ai pas de d_type dans sa structure. J'ai aussi été dans \Dev-Cpp\lib\gcc\mingw32\3.4.2\include\ et pas de dirent.h, alors je l'ai ajouté mais rien de neuf. J'ai remarquer que mon dirent.h était compacté mais je croise que ça ne change rien.


    Bétise d'erreur...

  5. #5
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Tu n'as pas pu récupérer le dirent.h de ton système (je ne connais plus trop dev-c++) .

    Eventuellement si tu peux le retrouver, regardes dedans, la tête de la structure.

  6. #6
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Voici le dirent.h que j'ai trouver dans \Dev-Cpp\lib\gcc\mingw32\3.4.2\include\

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    /*
     * DIRENT.H (formerly DIRLIB.H)
     * This file has no copyright assigned and is placed in the Public Domain.
     * This file is a part of the mingw-runtime package.
     * No warranty is given; refer to the file DISCLAIMER within the package.
     *
     */
    #ifndef _DIRENT_H_
    #define _DIRENT_H_
     
    /* All the headers include this file. */
    #include <_mingw.h>
     
    #include <io.h>
     
    #ifndef RC_INVOKED
     
    #ifdef __cplusplus
    extern "C" {
    #endif
     
    struct dirent
    {
    	long		d_ino;		/* Always zero. */
    	unsigned short	d_reclen;	/* Always zero. */
    	unsigned short	d_namlen;	/* Length of name in d_name. */
    	char		d_name[FILENAME_MAX]; /* File name. */
    };
     
    /*
     * This is an internal data structure. Good programmers will not use it
     * except as an argument to one of the functions below.
     * dd_stat field is now int (was short in older versions).
     */
    typedef struct
    {
    	/* disk transfer area for this dir */
    	struct _finddata_t	dd_dta;
     
    	/* dirent struct to return from dir (NOTE: this makes this thread
    	 * safe as long as only one thread uses a particular DIR struct at
    	 * a time) */
    	struct dirent		dd_dir;
     
    	/* _findnext handle */
    	long			dd_handle;
     
    	/*
             * Status of search:
    	 *   0 = not started yet (next entry to read is first entry)
    	 *  -1 = off the end
    	 *   positive = 0 based index of next entry
    	 */
    	int			dd_stat;
     
    	/* given path for dir with search pattern (struct is extended) */
    	char			dd_name[1];
    } DIR;
     
    DIR* __cdecl opendir (const char*);
    struct dirent* __cdecl readdir (DIR*);
    int __cdecl closedir (DIR*);
    void __cdecl rewinddir (DIR*);
    long __cdecl telldir (DIR*);
    void __cdecl seekdir (DIR*, long);
     
     
    /* wide char versions */
     
    struct _wdirent
    {
    	long		d_ino;		/* Always zero. */
    	unsigned short	d_reclen;	/* Always zero. */
    	unsigned short	d_namlen;	/* Length of name in d_name. */
    	wchar_t		d_name[FILENAME_MAX]; /* File name. */
    };
     
    /*
     * This is an internal data structure. Good programmers will not use it
     * except as an argument to one of the functions below.
     */
    typedef struct
    {
    	/* disk transfer area for this dir */
    	struct _wfinddata_t	dd_dta;
     
    	/* dirent struct to return from dir (NOTE: this makes this thread
    	 * safe as long as only one thread uses a particular DIR struct at
    	 * a time) */
    	struct _wdirent		dd_dir;
     
    	/* _findnext handle */
    	long			dd_handle;
     
    	/*
             * Status of search:
    	 *   0 = not started yet (next entry to read is first entry)
    	 *  -1 = off the end
    	 *   positive = 0 based index of next entry
    	 */
    	int			dd_stat;
     
    	/* given path for dir with search pattern (struct is extended) */
    	wchar_t			dd_name[1];
    } _WDIR;
     
     
     
    _WDIR* __cdecl _wopendir (const wchar_t*);
    struct _wdirent*  __cdecl _wreaddir (_WDIR*);
    int __cdecl _wclosedir (_WDIR*);
    void __cdecl _wrewinddir (_WDIR*);
    long __cdecl _wtelldir (_WDIR*);
    void __cdecl _wseekdir (_WDIR*, long);
     
     
    #ifdef	__cplusplus
    }
    #endif
     
    #endif	/* Not RC_INVOKED */
     
    #endif	/* Not _DIRENT_H_ */
    Comment on le remarque il manque le d_type. Et la version que tu m'a donnée PRomu@ld n'en contient pas non plus. Ce que je veux, c'est que le code que j'ai cité plus haut fonctionne. Si quelqu'un à une source de dirent.h avec le d_type, je pense que ça pourrait fonctionner.

  7. #7
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Points : 422
    Points
    422
    Par défaut
    salut

    essaye de remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(file->d_type == DT_DIR)
    {
    lister(strncat(directory, file->d_name, 256));
    }
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DIR *tmp;
    strncat(directory, file->d_name, 256);
    if ((tmp = opendir())) {
      closedir(tmp);
      lister(directory);
    }
    le code que j'ai pris sur le site de mon prof:
    http://www.ai.univ-paris8.fr/~amsi/S...ts/cours04.pdf

  8. #8
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bon, je me suis un peu inspiré de ton prof pour une condition et mon programme à l'air de fonctionné. La récursivité en tout cas. Le voilà :
    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
    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <stdlib.h>
    #include <string.h>
     
    void findfile(char dossier[MAX_PATH])
    {
       char ssdossier[MAX_PATH];
       struct dirent *lecture;
       DIR *rep;
       rep = opendir(dossier);
     
       while ((lecture = readdir(rep))) {
             if(!strcmp(lecture->d_name, ".") || !strcmp(lecture->d_name, "..")) continue;
             sprintf(ssdossier,"%s%s\\",dossier,lecture->d_name);
             if (opendir(ssdossier) != NULL) {
                printf("[]");
                findfile(ssdossier);
                } else {printf("/");}
             printf("%s\n",lecture->d_name);
       }   
       closedir(rep);
    }
     
    int main(void)
    {
       findfile("c:\\");
       system("pause");
       return 0;
    }
    Si vous voudriez bien le tester et me dire un peu ce que vous en pensez, je suis à votre écoute. Ca me met une erreur à la fin du listing.

Discussions similaires

  1. PLS-00103 erreur incomprise sur PL/SQL developer
    Par balkis dans le forum PL/SQL
    Réponses: 5
    Dernier message: 01/09/2010, 16h03
  2. Erreur 145 sur table mysql
    Par ramses83 dans le forum Requêtes
    Réponses: 1
    Dernier message: 06/09/2007, 21h09
  3. [Kylix] erreur time.sur kylix avec redhat 9.0
    Par sumco dans le forum EDI
    Réponses: 4
    Dernier message: 20/05/2004, 15h13
  4. Réponses: 9
    Dernier message: 27/04/2004, 11h01
  5. [VB6] Erreur 9 sur redim preserve
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/10/2002, 17h29

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