Int main(int argc, char ** argv) [Résolu]

Signaler
Messages postés
5
Date d'inscription
samedi 26 août 2006
Statut
Membre
Dernière intervention
18 juin 2008
-
Messages postés
5
Date d'inscription
samedi 26 août 2006
Statut
Membre
Dernière intervention
18 juin 2008
-
Bonjour,
mon probleme se porte sur le paramètre "char **argv" de la fonction principale utile pour connaître les adresses de chaque argument.

Par exemple dans le dossier TOTO il y a 5 fichiers: main.c audio.c hdd.c scsi.c cdrom.c
Mon programme consiste à afficher les arguments émit par l'utilisateur mais quand j'écris
c:\TOTO>prog *.c
Le programme m'affiche  l'argument telle que je l'ai ecris *.c au lieu de main.c audio.c hdd.c scsi.c cdrom.c comme sous linux pourquoi???

mon compilateur est le toolkit visual studio 2003
merci d'avance

3 réponses

Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Bonjour,

Il faut utiliser le filtre passé en argv[1] ("*.c" dans l'exemple) avec FindFirstFile() puis boucler avec FindNextFile().

Voici un exemple de petit programme console qui liste des fichiers suivant un filtre passé en paramètre :

#include <stdio.h>
#include <windows.h>



int main(int argc,char** argv)
{
   // --- Filtre des fichiers
   char szFiltre[MAX_PATH];
   if (argc == 1)
      strcpy(szFiltre,"*.*");
   else
      strcpy(szFiltre,argv[1]);
   printf("\nLister les fichiers "%s" :\n",szFiltre);






   // --- Positionner sur le premier fichier
   WIN32_FIND_DATA Find;
   HANDLE hFichier = FindFirstFile(szFiltre,&Find);
   if (hFichier == INVALID_HANDLE_VALUE)
   {
      printf("*** Aucun fichier correspondant au filtre ***\n");
      return 0;
   }






   // --- Parcourir les fichiers
   int iCompteur = 0;
   do
   {
      // --- Ne pas traiter les répertoires
      if (Find.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue;




      // --- Ne pas traiter les fichiers système
      if (Find.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) continue;




      // --- Fichier à traiter
      ++iCompteur;
      printf("%d : %s\n",iCompteur,Find.cFileName);
   } while (FindNextFile(hFichier,&Find));
   printf("%d fichier(s)\n",iCompteur);






   // --- Fermer la recherche
   FindClose(hFichier);
   return 0;
}





Ce qui donne (le programme se nomme test) :

test



Lister les fichiers "*.*" :
1 : Test.exe
2 : Test.obj
3 : Test.pch
4 : vc60.idb
4 fichier(s)



test *.exe



Lister les fichiers "*.exe" :
1 : Test.exe
1 fichier(s)



test *.cpp



Lister les fichiers "*.cpp" :
*** Aucun fichier correspondant au filtre ***






Jean-François
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
salut

ca ne vient pas du compilateur mais du shell que tu utilises :

sous linux, en bash, *... est remplace automatiquement par la liste des fichiers qui correspondent au masque.

sous windows, non.
Messages postés
5
Date d'inscription
samedi 26 août 2006
Statut
Membre
Dernière intervention
18 juin 2008

merci infiniment jfrançois