|
|
|
|
Slt! voila j'ai un petit probleme (vous vous en seriez doute!) j'essaie de faire un ls recursif( la celebre commande ls -R sous linux), j'ai reussi a faire le ls de base(sans recursivite) mais tout ce complique qd j'essaie le recursif!
help me!!!!!!
#include<stdio.h>
#include<dirent.h>
#include<sys/types.h>
#include<stdlib.h>
#include<string.h>
int regFlag=0; //drapeau pour l'option -R
//fonction non utilise pour l'instant , le test d'option est fait directement ds le main
//char *parseArgs(int argc,char **argv){
//if ((argv[1][0]=='-')&&(argv[1][1]=='R')) regFlag=1;
//else {if (argc>=2) printf("mauvaise option");}
//return (argv[2]);
//}
//fonction qui concatene src et dest avec allocation de memoire
char *extendString(char *dest,const char *src){
if (!(dest=(char*)realloc(dest,(strlen(dest)+strlen(src)+1)*sizeof(char))))
{
puts("impossible d'allouer");
exit;
}
strcat(dest,src);
return(dest);
}
//fonction du ls recursif
int stdlistdir(const char* nameDir){
DIR *dir_stream;
char* entree;
struct dirent *dir_ent;
dir_stream=opendir(nameDir);
if (dir_stream==NULL){
printf("erreur de lecture");
exit;
}
while(1){
dir_ent=readdir(dir_stream);
if (regFlag==1){ //si l'option est activee...
entree=(char *)strdup(nameDir);
extendString(entree,"/");
extendString(entree,dir_ent->d_name);
strcat(entree,nameDir);
if (*dir_ent->d_name!='.')
printf("%s\n",dir_ent->d_name);
}
else if (*(dir_ent->d_name)!='.') //sinon
printf("%s\n",dir_ent->d_name);
}
closedir(dir_stream);
}
int main(int argc,char* argv[]){
//test si l'option est presente
if ((argv[1][0]=='-')&&(argv[1][1]=='R')) {
regFlag=1;
stdlistdir(argv[2]);
}
else stdlistdir(argv[1]);
getchar();
}
merci d'avance o toi grand sage de l'info lol
Répondre à Bob
|
Je n et'ecrirais pas le code, car je n'ai pas le temps, et puis ce que j'vais fait etait plus court que ce que t'as fait, mais je ne sais plus ou je l'ai mis, voici le principe :
|
Salut,
void disp_dir(char* dirpath)//, int rec, char onebylinemode, char longformat)
{ DIR* dirtolist = NULL;
struct dirent* d_filename = NULL;
if ( dirpath==NULL)
{
fprintf(stderr, "Erreur : nom de répertoire passe NULL\n");
exit(1);
}
if( opendir(dirpath)==NULL )
{
return ;
}
// ici, on sait qu'on a affaire à un répertoire, donc on le parcourt
//récursivement
if ( (dirtolist = opendir(dirpath)) == NULL )
{
perror("opendir ");
exit(1);
}
while ( (d_filename = readdir(dirtolist)) != NULL )
{
/* affichage inconditionnel du nom de fichier ou de repertoire
*/
printf(" %s", d_filename->d_name);
printf("\t");
/* si on est en mode récursif et qu'on a un rep, on enregistre
son nom pour le traiter ensuite */
if( opendir(d_filename->d_name)!=NULL &&
strcmp(d_filename->d_name,".")!=0 &&
strcmp(d_filename->d_name,"..")!=0)
{
disp_dir( d_filename->d_name);
}
}
}
En gros, ça devrait marcher, j'ai ressorti un vieux tp :) @++ Vous hésitez entre Linux et Windows ? Vous voulez dépenser du temps ou de l'argent ? |