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 :

Lister des fichiers dans un répertoire


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mars 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 1
    Par défaut Lister des fichiers dans un répertoire
    Bonjour,
    Je programme en ce moment en C , et je rencontre un problème :

    je veux lister dans un fichier texte tous les noms de fichiers présents dans un sous répertoire ( dir /b *.* > Liste.txt).
    Le problème c'est que même en renseignant le chemin absolut (d:\.......\toto),
    le programme n'y parvient.Il continue à me générer le fichier texte dans le même répertoire que mon programme (Script2.exe )
    et le programme refuse de s'appliquer a mes sous-répertoires.

    Quelqu'un peut m'aider ?


    Programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int main(void)
    {
    /////////////// creer le fichier meta donnees " /////////////////////////////////////////////////////
    system ("echo salut dimitri v3!!!");
    system ("d:\\"); 
    system ("cd d:\\documents-utilisateurs\\jd\\Bureau\\Nouveau_dossier\\jd_exploit\\Envoi\\New");
    system ("dir /b *.* > fic_a_traiter.txt");
    system ("dir");
    f=fopen("fic_a_traiter.txt","r");

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Les appels fait dans le programme en C avec la fonction system() ne remplace pas un script Shell. Excute le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdlib.h>
    int main(void)
    {
        system ("dir");
        system ("cd d:\\");
        system ("dir");
        return 0;
    }
    pour t'en convaincre. Ils ne sont pas corrélés entre eux et l'action du 1er system() est oublié où moment de faire le second. Tu ne t'es donc pas déplacé dans le dossier souhaité et le fichier est crée dans le dossier courant pour le programme C qui l'appelle (par défaut, celui d'où il est lancé).

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2007
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 179
    Par défaut
    Pourquoi ne pas faire les choses directement en C? il n'est pas dur de parcourrir les fichiers d'un répertoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            DIR *rep;
     
            rep = opendir("LechemindeTonRepertoire");
            struct dirent *lecture;
     
            while ((lecture = readdir(rep))) {
                    printf("- nom du fichier : %s\n", lecture->d_name);
                    // ton traitement
            }
    ne pas oublier "#include <dirent.h>"

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par JD971 Voir le message
    Le problème c'est que même en renseignant le chemin absolut (d:\.......\toto),
    le programme n'y parvient.Il continue à me générer le fichier texte dans le même répertoire que mon programme (Script2.exe )
    et le programme refuse de s'appliquer a mes sous-répertoires.
    Simplement, comme l'a indiqué Bktero, parce que la commande system produit des sous-processus dont les contextes sont indépendants (entre eux) à chaque appel (ils dépendent par contre du contexte du programme appelant)

    Tu auras ce que tu veux si tu concatènes les commandes importantes dans une seule :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    system ("cd d:\\documents-utilisateurs\\jd\\Bureau\\Nouveau_dossier\\jd_exploit\\Envoi\\New ; dir /b *.* > fic_a_traiter.txt");

    (ou quelque chose comme ça. Je ne suis pas familier avec Win et je ne sais pas si le séparateur est le ";")

    Néanmoins c'est dépendant de l'OS, et la manière plus portable de le faire est celle indiquée par pythéas.

  5. #5
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    787
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 787
    Par défaut
    Si tu utilises la command system, la syntaxe pour que dir liste aussi le contenu des sous-répertoires est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dir b:\*.* /b /s > dir.txt
    Si tu veux que le fichier dir.txt se situe à un endroit précis, tu lui donnes un chemin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dir b:\*.* /b /s > b:\dir.txt
    Note: si tu crées dir.txt dans un répertoire qui sera listé par ta commande dir (cas de la commande ci-dessus), tu retrouveras aussi dir.txt dans le fichier dir.txt avec une taille zéro.

    Le mieux est, comme l'a dit pythéas, de l'écrire en C.

    Personnellement, je n'emploie pas dirent, je crée une petite fonction récursive:
    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
     
    void listdir(void)
    {
         struct ffblk f;
         int done;
     
        done=findfirst("*.*",&f,FA_NORMAL|FA_ARCH|FA_RDONLY);
        while(!done) {
             printf("%s\n",f.ff_name);
             done=findnext(&f);
             }
        findclose(&f);
        done=findfirst("*.*",&f,FA_NORMAL|FA_ARCH|FA_RDONLY|FA_DIREC);
        while(!done) {
             if(*f.ff_name!='.' && (f.ff_attrib&FA_DIREC)!=0))
                  if(chdir(f.ff_name)==0) {
                       listdir();
                       chdir("..");
                       }
             done=findnext(&f);
             }
         findclose(&f);
    }
    Edgar.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par edgarjacobs Voir le message
    Personnellement, je n'emploie pas dirent, je crée une petite fonction récursive:
    Ah oui ?

    Et où se trouve cette belle fonction findfirst en C ?

  7. #7
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    787
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 787
    Par défaut
    Salut souviron34,

    Chez moi, dans dir.h

    Je ne suis pas sur qu'elle soit standard, j'utilise Cbuilder6

    Edgar.

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par edgarjacobs Voir le message
    Chez moi, dans dir.h

    Je ne suis pas sur qu'elle soit standard, j'utilise Cbuilder6
    Eh oui

    norme C99

    Ne figure aucun dir.h

    De même que en C89, en C90

    Ni même dans la dernière mouture C11

    Ni même dans POSIX..

    Donc abstiens-toi stp de donner des conseils qui n'en sont pas, et ne sont pas portables ou conformes à une norme.

    Merci


    Note: et CBuilder6 doit être pour C++. Ici c'est le forum C.. Les solutions doivent donc être C..

  9. #9
    Nouveau candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 2
    Par défaut
    Salut souviron34
    ... et tous ceux qui veulent utiliser cette solution qui marche sous Windows.

    Avec Visual Studio 2005, il faut aller voir _findfirst dans <io.h>

Discussions similaires

  1. [XML] Lister des fichiers dans des répertoires
    Par voxiz dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 16/02/2010, 16h25
  2. Lister les fichiers dans un répertoire
    Par lohot dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 30/03/2008, 12h55
  3. Impossible de créer des fichiers dans un répertoire
    Par isabelle674 dans le forum Solaris
    Réponses: 11
    Dernier message: 24/01/2008, 00h04
  4. lire le nom des fichiers dans un répertoire
    Par wonderboutin123 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/11/2007, 04h22
  5. Lister des fichiers dans un repertoire
    Par K.othmane dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 11h14

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