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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| #include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char *argv[])
{
typedef struct fichier fichier;
struct fichier
{
char nom[100];
char adresse[1024];
int taille;
int vu;
int dossier;
int niveau;
};
struct stat fstat;
struct dirent *lecture; //nom du fichier
FILE *file =NULL;
DIR *rep; //repertoire en cours
char repertoire[1024] =".", dossier_courant[1024]; //repertoire a lire
fichier aFichier[100]; //fichier et dossier du repertoire
int i=1, j = 0, nb_de_dossier = 0, niveau = 1, dossier;
strcpy(aFichier[0].nom ,".");
strcpy(aFichier[0].adresse, __FILE__);
aFichier[0].taille = 0;
aFichier[0].vu = 1;
aFichier[0].dossier = 1;
aFichier[0].niveau = 0;
//changement de repertoire (même niveau)
j = 0;//pour trouver les dossier, ne pas mettre dans le while
while(j<2)
{
if(nb_de_dossier !=0)
{
while(j<100)
{
if(aFichier[j].dossier != 0)
{
strcpy(repertoire, aFichier[j].adresse);
}
printf("%ld %s\n",j,repertoire);
j++;
}
printf("%s",repertoire);
}
else
{
strcpy(repertoire, ".");
}
printf("%s",repertoire);
rep = opendir(repertoire);
/*recuperation de var fichier, et du nombre de fichier dans le repertoire*/
while ((lecture = readdir(rep)))
{
if ( strcmp(lecture->d_name, ".") == 0 ||
strcmp(lecture->d_name, "..") == 0 )
continue;
//fichier courant
strcpy(dossier_courant, repertoire);
strcat(dossier_courant, "/");
strcat(dossier_courant, lecture->d_name);
stat(lecture->d_name, &fstat);
if(S_ISDIR(fstat.st_mode))
{
aFichier[i].dossier = nb_de_dossier + 1;
strcpy(aFichier[i].nom, lecture->d_name);
aFichier[i].niveau = niveau;
}
else
{
aFichier[i].dossier = 0;
aFichier[i].taille = (int)fstat.st_size;
aFichier[i].niveau = niveau;
strcpy(aFichier[i].nom,lecture->d_name);
}
strcpy(aFichier[i].adresse, dossier_courant);
printf("%s \t\t%ld \n\t %s \n",aFichier[i].nom, aFichier[i].taille, aFichier[i].adresse);
i++;
nb_de_dossier++;
}
dossier++;
j++;
}
closedir(rep);
system("pause");
return 0;
} |
Partager