agent 047
Messages postés5Date d'inscriptionsamedi 26 août 2006StatutMembreDernière intervention18 juin 2008
-
18 juin 2008 à 06:07
agent 047
Messages postés5Date d'inscriptionsamedi 26 août 2006StatutMembreDernière intervention18 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
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 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;
}