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 :

connaître la liste des fichiers d'une extension donnée au sein d'un répertoire


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 19
    Points
    19
    Par défaut connaître la liste des fichiers d'une extension donnée au sein d'un répertoire
    Bonjour à tous, j'ai regardé la FAQ du site pour voir comment régler mon problème. J'ai trouvé le code suivant, mais il s'avère qu'à la compilation, je suis bombardée d'erreurs.
    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
    #include <windows.h>
     
    WIN32_FIND_DATA File;
    HANDLE hSearch;
    BOOL re;
     
    hSearch=FindFirstFile("*.*", &File);
    if(hSearch ==  INVALID_HANDLE_VALUE)
    {
       return FALSE;
    }
     
    re=TRUE;
    do
    {
       /* Traitement */
       re = FindNextFile(hSearch, &File);
    } while(re);
     
    FindClose(hSearch);
    return TRUE;
    Dans mon application, j'ai besoin de vérifier tous les noms de fichier d'une extension donnée, afin de prévenir LE BUG en cas de création immédiate d'un nouveau fichier sous la même appellation.
    Comment puis-je procéder?
    SE: windows.

  2. #2
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Premièrement je ne vois pas ou la compilation ne pourrais pas passer.
    Tu pourrais nous mettre la première ligne des messages d'erreurs de compilation ?

    Deuxièmement, tu veux faire quoi au juste ? Vérifier qu'un nom de fichier n'existe pas déjà ou récupérer la liste de tous les fichiers avec une extension donnée ? J'ai du mal à y voir clair dans ce que tu racontes.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 19
    Points
    19
    Par défaut plus précise
    Citation Envoyé par mchk0123
    Premièrement je ne vois pas ou la compilation ne pourrais pas passer.
    Tu pourrais nous mettre la première ligne des messages d'erreurs de compilation ?

    Deuxièmement, tu veux faire quoi au juste ? Vérifier qu'un nom de fichier n'existe pas déjà ou récupérer la liste de tous les fichiers avec une extension donnée ? J'ai du mal à y voir clair dans ce que tu racontes.
    Les voici en pièces jointes les erreurs. Moi non plus je ne vois pas pourquoi la compilation ne marche pas.
    Je teste qu'une fois qu'un fichier existe, je puisse prévenir lorsqu'on est sur le point de créer un fichier du même nom. Dans l'éventualité de le nommer autrement par défaut.
    Fichiers attachés Fichiers attachés

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par ladygtk
    Les voici en pièces jointes les erreurs. Moi non plus je ne vois pas pourquoi la compilation ne marche pas.
    Es-tu bien conscient que le code de la FAQ n'est que simple exemple et qu'il ne doit pas etre tel quel ?
    En particulier il est indispensable de mettre ce code dans une fonction (je note d'ailleurs la modification a apporter dans la FAQ a ce sujet).

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 19
    Points
    19
    Par défaut code de fonction
    Citation Envoyé par gl
    Es-tu bien conscient que le code de la FAQ n'est que simple exemple et qu'il ne doit pas etre tel quel ?
    En particulier il est indispensable de mettre ce code dans une fonction (je note d'ailleurs la modification a apporter dans la FAQ a ce sujet).
    Oui j'en suis consciente, et je pose cette discussion justement pour m'aider à comprendre le code. C ça le problème, je programme en C les fonctions basiques des 'stdio, stdlib et string' .h, et il y a des instructions que je ne comprenais pas pour ne pas dire tout. Maintenant ctait juste pour avoir une base pour me repérer sur mon problème qui est de lister les fichiers d'un répertoire.

  6. #6
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    J'ai un doute ...

    Est-ce que le code C que tu as mis est bien celui que tu compiles ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 19
    Points
    19
    Par défaut dans un corps c mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    int main(int argc, char *argv[])
    { 
      ......
      system("PAUSE");	
      return 0;
    }
    G rajouté ça autour du code de la FAQ. C vrai, je m'excuse en regardant plus attentivement g vu que ça faisait dfaut.
    Maintenant ça s'exécute, mais je ne vois pas le résultat la console s'affiche et s'estompe aussitôt.
    Sinon g utilisé le code suivant finalement:
    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
    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
     
    int main(void)
    {
       struct dirent *lecture;
       DIR *rep;
       rep = opendir("/tmp");
       while ((lecture = readdir(rep)))
       {
          printf("FICHIER: %s\n", lecture->d_name);
       }
       closedir(rep);
     
       return 0;
    }
    Avec autre chose que "/tmp" comme spécification de répertoire, et ça marche. Donc c cool. Par contre pourriez vous me dire comment on spécifie ou on récupère l'adresse absolue du répertoire (à partir duquel s'exécute le programme). Parce que je suppose que si je change d'ordi ou tout simplement d'emplacement pour le projet, il va y avoir incohérence.
    Merci

  8. #8
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    J'y crois pas !!!

    J'ai enfin compris ... tu as recopier, sans réflechir, du code de la FAQ ... mais tu n'as même pas pris la peine de vérifier c'est que c'était du code pour Windows alors que tu travaille sur Linux !

    Bon à part ça, pour récupérer le nom de l'exe, c'est comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main(int argc, char *argv[]) {
      printf("- exe : '%s'\n", argv[0]);
     
      return 0;
    }
    - argc : nombre d'arguments dans la ligne de commande (exe compris)
    - argv : tableau des arguments ... " ...

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 40
    Points : 19
    Points
    19
    Par défaut non sous windows
    Merci pour le code mchk0123, ça me permet de récupérer le répertoire avec une opération sur la chaîne. Merciiii
    Non je travaille sur windows. J'ai testé (api windows) le premier code cité sans succès, mais avec le deuxième (posix)ça a été.

  10. #10
    Membre éclairé Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Points : 844
    Points
    844
    Par défaut
    Au mieux essaye de recompiler ta première version avec "#include <winbase.h>" au lieu de "#include <windows.h>", mais je doute quand même.

  11. #11
    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 : 68
    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 ladygtk
    Dans mon application, j'ai besoin de vérifier tous les noms de fichier d'une extension donnée, afin de prévenir LE BUG en cas de création immédiate d'un nouveau fichier sous la même appellation.
    Comment puis-je procéder?
    SE: windows.
    Ceci fonctionne parfaitement.
    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
     
    #include <windows.h>
    #include <stdio.h>
     
    int main (void)
    {
       WIN32_FIND_DATA File;
       HANDLE hSearch = FindFirstFile ("*.*", &File);
       if (hSearch != INVALID_HANDLE_VALUE)
       {
     
          BOOL re;
          do
          {
             /* Traitement */
             re = FindNextFile (hSearch, &File);
     
             if (re)
             {
                printf ("%s\n", File.cFileName);
             }
          }
          while (re);
     
          FindClose (hSearch);
       }
       return 0;
    }
    Mais la méthode avec <dir.h> et <dirent.h> est plus portable. (POSIX.1)

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/04/2013, 00h26
  2. Liste des fichiers sans l'extension .inc.php
    Par Bouki dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 25/07/2011, 18h43
  3. Réponses: 2
    Dernier message: 27/02/2011, 10h11
  4. Lister/supprimer des fichiers avec une extension précise
    Par guiguiomr dans le forum VBScript
    Réponses: 10
    Dernier message: 20/05/2008, 10h34
  5. Lister l'esemble des fichiers présents à une URL donnée
    Par gabest dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 17/05/2006, 14h05

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