oregon ha scritto:
Ma come ottieni la lista?
il codice l'ho postato in un'altra discussione...
lo rimetto:
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
typedef enum { false = 0, true }bool;
#define ramo "+--"
#define trov "+--"
#define spac " ¦"
#define pipe "¦"
int j = 0;
bool caricameno_elemnti_lista(const char *t_str)
{
chdir(t_str);
DIR *t_dir = NULL;
char t_buf[20][256];
char t_buf1[256];
char t_buf2[256];
char t_tmp[256];
int t_i = 0;
int t_j = 0;
int t_al = 0;
struct dirent *t_pent;
struct stat t_sta;
if(!(t_dir = opendir("."))){
printf("opendir() failure; terminating!\n");
exit(1);
}
if(j == 0){
strcpy(t_buf1, trov);
}
else {
strcpy(t_buf1, pipe);
for(t_al = 0; t_al < j; t_al++){
strcat(t_buf1, spac);
}
strcpy(t_buf2, t_buf1);
}
while(t_pent = readdir(t_dir)){
// printf("A -> Aprtura dir name %s\n", t_pent->d_name);
if(t_pent->d_name[0] != '.'){
//printf("A -> Aprtura dir name %s\n", t_pent->d_name);
stat(t_pent->d_name, &t_sta);
if((S_ISDIR(t_sta.st_mode))){
if(j != 0) {
strcat(t_buf1, ramo);
}
printf("%s %s\n", t_buf1, t_pent->d_name);
++j;
caricameno_elemnti_lista(t_pent->d_name);
--j;
}
else {
strcpy(t_buf[t_i], t_pent->d_name);
//g_print("C -> Non è una dir\n");
++t_i;
}
}
}
for(t_j = 0; t_j < t_i; t_j++){
if(j > 0){
if(t_j+1 == t_i){
strcpy(t_tmp, t_buf2);
strcat(t_tmp, ramo);
}
else {
strcpy(t_tmp, t_buf2);
strcat(t_tmp, trov);
}
printf("%s %s\n", t_tmp, t_buf[t_j]);
}
else {
if(t_j+1 == t_i){
strcpy(t_tmp, ramo);
}
else {
strcpy(t_tmp, trov);
}
printf("%s %s\n", t_tmp, t_buf[t_j]);
}
}
closedir(t_dir);
chdir("..");
return false;
}
int main(int argc, char *argv[])
{
if(argv[1] == NULL){
printf("Eror! no name path\n");
}
else {
caricameno_elemnti_lista(argv[1]);
}
return 0;
}
come ho scritto in un'altra discussione: devo sistemarlo meglio!! ma in questa discussione chiedo il filtraggio dei file...