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 :

Ouverture fichiers même extension..


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut Ouverture fichiers même extension..
    Bonjour j'aimerais savoir si il existe une fonction ou un moyen en C qui permet d'ouvrir tous les fichiers d'une même extension (ici les .bat) d'un même répertoire, je coince un peu là, vous avez une idée ???

  2. #2
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    Bonjour,
    pas a ma connaissance, mais c'est pas bien dur a coder avec opendir, readdir, strstr et open.
    il y a un exemple pour lister les fichier d un repertoire dans le faq, apres il faut juste verifier que le nom du fichier fini bien par .bat et l ouvrir.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut
    merci pour l'info je pense avoir trouvé, je test et si il y a un problème je reviens

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut
    Un problème en effet, avec readdir() j'ai réussi à obtenir la liste des fichiers du répertoire voulu mais j'ai pas réussi à faire en sorte de les ouvrir et de les afficher (leur contenu).
    Il faudrait que ça affiche le contenu de tous les fichiers .txt ou .bat présent dans le répertoire où le programme est lancé...

    Quelqu'un a petite idée svp ??

  5. #5
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    c'est quoi qui te pose probleme ?
    si t as le nom tu dois pouvoir faire un fopen et un fread dessus ?

    post ton code au pire avec les endroits ou ca coince

  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 flodus Voir le message
    u mais j'ai pas réussi à faire en sorte de les ouvrir et de les afficher (leur contenu).
    c'est quoi "le contenu" ???

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut Nouveau problème..
    J'ai trouvé comment afficher le contenu de chaque fichier du répertoire voulu.

    Voici une capture de ce que j'obitient :

    (Cliquez dessus pour agrandir)

    Voici le code :
    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
    #include <stdio.h>
    #include <string.h>
    #include <dirent.h>
    #include <windows.h>
    #include <ctype.h>
    #define LG_MAX 36
     
    bool retval;
    char chaine[LG_MAX] ;
    char *ptr, *ptr2, *c  ;
    char nom_fichier;
    int length, i;
    struct dirent *lecture;
     
    FILE*fichier;
    DIR *dir;
     
     
    main()
    {
       dir = opendir(".");
       int i = 0;
       while ((lecture = readdir(dir)))
       {
       	if ((ptr2 = strstr(lecture->d_name, "BAT" )) != NULL)
          {
          	printf("\n");
             fichier = fopen(lecture->d_name , "rb+");
     
          	while(fgets(chaine, LG_MAX, fichier) != NULL)
             {
              	length = strlen(chaine);
      			 	for (i=0; i<length; i++)
      			 	{
          			chaine[i] = toupper(chaine[i]);
      			 	}
       		  	c = "\\\\BT0D0000\\DFSSMS\\SMS_REF\\" ;
                ptr = strstr(chaine, c );
           	  	if (ptr != NULL )
                {
                   if (opendir(chaine) == NULL)
       				{
                   printf("\n                           -------- %s --------\n", lecture->d_name);
     
                   printf("\n");
                   printf("         Repertoire inexistant : ");
                   printf ("  %s \n", ptr);
                   }
                }
            }
    		fclose(fichier);
          }
       }
    }
    Fonctionnement du code:

    -ouverture et lecture de tous les fichiers du répertoire où ce trouve le programme.(ce sont des fichiers .bat)

    -recherche des lien(s) inexistant(s).(dans les fameux .bat)

    -affichage des liens morts.(précédé du nom du fichier .bat dans lequel le(s) lien(s) se trouve(nt).


    Mon problème:

    J'aimerais que cela m'affiche une seule fois le nom du fichier(.bat) et pas pour chacuns des liens inexistants..

    exemple(avec la capture d'écran):

    ----- NOM DE FICHIER.BAT -----

    affichage des tous les liens morts de NOM DE FICHIER.BAT

    ----- NOUVEAU NOM DE FICHIER.BAT -----

    affichage des tous les liens morts de NOUVEAU NOM DE FICHIER.BAT


    Voilà j'espère avoir été assez clair et précis...N'hésitez pas à demandez des précisions si besoin..
    Le programme touche à sa fin,
    Merci d'avance.

  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
    • primo, quand on fait un opendir, il faut faire un closedir quand on en a fini avec
    • secondo, les readdir sortent toujours . et ..

  9. #9
    Expert éminent
    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
    Par défaut
    Citation Envoyé par flodus Voir le message
    Voici le code :
    Codage défectueux...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    -------------- Build: Debug in hello ---------------
     
    Compiling: main.c
    C:\dev\hello\main.c:8: error: syntax error before "retval"
    C:\dev\hello\main.c:8: warning: type defaults to `int' in declaration of `retval'
    C:\dev\hello\main.c:8: warning: data definition has no type or storage class
    C:\dev\hello\main.c:20: warning: return type defaults to `int'
    C:\dev\hello\main.c:20: warning: function declaration isn't a prototype
    C:\dev\hello\main.c: In function `main':
    C:\dev\hello\main.c:37: warning: assignment discards qualifiers from pointer target type
    Process terminated with status 1 (0 minutes, 4 seconds)
    1 errors, 5 warnings

  10. #10
    Expert éminent
    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
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Codage défectueux...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    -------------- Build: Debug in hello ---------------
     
    Compiling: main.c
    C:\dev\hello\main.c:8: error: syntax error before "retval"
    C:\dev\hello\main.c:8: warning: type defaults to `int' in declaration of `retval'
    C:\dev\hello\main.c:8: warning: data definition has no type or storage class
    C:\dev\hello\main.c:20: warning: return type defaults to `int'
    C:\dev\hello\main.c:20: warning: function declaration isn't a prototype
    C:\dev\hello\main.c: In function `main':
    C:\dev\hello\main.c:37: warning: assignment discards qualifiers from pointer target type
    Process terminated with status 1 (0 minutes, 4 seconds)
    1 errors, 5 warnings
    Ce code
    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
     
    #include <stdio.h>
    #include <string.h>
    #include <dirent.h>
    #include <ctype.h>
     
    int main (void)
    {
       DIR *dir = opendir (".");
       if (dir != NULL)
       {
          struct dirent *lecture;
     
          while ((lecture = readdir (dir)) != NULL)
          {
             char *ptr2 = strstr (lecture->d_name, ".c");
             if (ptr2 != NULL)
             {
                FILE *fichier = fopen (lecture->d_name, "rb+");
                printf ("\n");
                if (fichier != NULL)
                {
                   char chaine[36];
                   while (fgets (chaine, sizeof chaine, fichier) != NULL)
                   {
                      int const length = strlen (chaine);
                      int i;
                      for (i = 0; i < length; i++)
                      {
                         chaine[i] = tolower (chaine[i]);
                      }
                      {
                         char const *c = "main";
                         char *ptr = strstr (chaine, c);
                         if (ptr != NULL)
                         {
                            DIR *dir2 = opendir (chaine);
                            if (dir2 == NULL)
                            {
                               printf
                                  ("\n                           -------- %s --------\n"
                                   "\n         Fichier :   %s \n",
                                   lecture->d_name, ptr);
                            }
                            else
                            {
                               closedir (dir2);
                            }
                         }
                      }
                   }
                   fclose (fichier);
                }
             }
          }
          closedir (dir);
       }
       return 0;
    }
    fonctionne chez moi :
    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
     
     
     
     
     
     
                               -------- hello.cbp --------
     
             Fichier :   main.c">
     
     
     
     
     
     
     
                               -------- main.c --------
     
             Fichier :   main (void)
     
     
                               -------- main.c --------
     
             Fichier :   main";
     
     
     
                               -------- main.cmt --------
     
             Fichier :   main(int argc, char *argv[])
     
     
     
                               -------- main.c~ --------
     
             Fichier :   main (void)
     
     
                               -------- main.c~ --------
     
             Fichier :   main";
     
     
     
    Process returned 0 (0x0)   execution time : 0.134 s
    Press any key to continue.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut
    en effet ça marche chez toi mais le problème n'est pas résolu..

    d'après tes résultats d'éxécutions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                               -------- main.c --------
     
             Fichier :   main (void)
     
     
                               -------- main.c --------
     
             Fichier :   main";
    Ce que je recherche à obtenir :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                               -------- main.c --------
     
             Fichier :   main (void)                
     
             Fichier :   main";
    Merci pour l'optimisation de mon code en tout cas

  12. #12
    Expert éminent
    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
    Par défaut
    Citation Envoyé par flodus Voir le message
    Ce que je recherche à obtenir :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                               -------- main.c --------
     
             Fichier :   main (void)                
     
             Fichier :   main";
    Merci pour l'optimisation de mon code en tout cas
    J'ai pas du tout regardé ça... Bah, simple question d'algo. Il faut re-séparer les printf() et mettre le premier printf() au bon endroit dans la boucle...

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut
    Il faut re-séparer les printf() et mettre le premier printf() au bon endroit dans la boucle
    Je pense que c'est plus complexe que ça à cause des différents pointeurs et variables que j'utilise, d'où mes difficultés à finir ce programme...

  14. #14
    Expert éminent
    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
    Par défaut
    Citation Envoyé par flodus Voir le message
    Je pense que c'est plus complexe que ça à cause des différents pointeurs et variables que j'utilise, d'où mes difficultés à finir ce programme...
    Nice try...

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut
    Citation Envoyé par flodus Voir le message
    Je pense que c'est plus complexe que ça à cause des différents pointeurs et variables que j'utilise, d'où mes difficultés à finir ce programme...
    J'espère me tromper en tout cas

Discussions similaires

  1. Déplacer tous les fichiers d'une même extension
    Par xav2303 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/10/2009, 21h24
  2. Réponses: 7
    Dernier message: 16/09/2009, 09h34
  3. [Débutant] Séléctionner les fichiers de même extension dans un repertoire
    Par anael52 dans le forum MATLAB
    Réponses: 6
    Dernier message: 17/07/2008, 11h04
  4. Réponses: 18
    Dernier message: 22/06/2006, 17h55
  5. Ouverture du même fichier
    Par menuge dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 30/05/2006, 14h21

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