Int main(int argc, char ** argv)

Résolu
agent 047 Messages postés 5 Date d'inscription samedi 26 août 2006 Statut Membre Dernière intervention 18 juin 2008 - 18 juin 2008 à 06:07
agent 047 Messages postés 5 Date d'inscription samedi 26 août 2006 Statut Membre Dernière intervention 18 juin 2008 - 18 juin 2008 à 15:28
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

cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
18 juin 2008 à 11:43
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
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
18 juin 2008 à 07:18
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.
0
agent 047 Messages postés 5 Date d'inscription samedi 26 août 2006 Statut Membre Dernière intervention 18 juin 2008
18 juin 2008 à 15:28
merci infiniment jfrançois
0
Rejoignez-nous