2014-01-27 4 views
0

Я хочу перечислить архивы в каталоге, и он работает. Проблема в том, что я нахожусь в "." и я хочу перечислить файлы te внутри «./hello» с «.», (ls -l hello), например. Проблема в том, что я не знаю, как добавить в stat полный путь, может ли кто-нибудь мне помочь? У меня есть этот код:чтение каталогов в C 2.0 stat error

else if(strcmp(O->argv[1], "-l")==0){ 
    if(O->argv[2]==NULL){ 
     dir=getcwd(buffer,256); 
     printf("%s \n",dir); 
    } 
    else { 
    dir=getcwd(buffer,256); 
    strcat(dir,"/"); 
    strcat(dir,O->argv[2]); 
    printf("%s \n",dir); 
    } 
    if ((pdirectorio=opendir(dir)) == NULL) //abrir directorio 
    printf("Error al abrir el directorio\n"); 
    else { 
    while((directorio=readdir(pdirectorio))!= NULL){ 
     if((stat(directorio->d_name,&info)) == -1) 
      printf("Fin de directorio.\n"); 
     else {...} 

ответ

0

Просто конкатенировать имя файла вы получаете от ReadDir() к имени каталога вы пересекающие. Что-то в следующих строках:

#include <stdio.h> 
#include <string.h> 
#include <dirent.h> 
#include <sys/stat.h> 

#define PATH_MAX 1024 

int main(int argc, char **argv) { 
    DIR *d; 
    struct dirent *e; 
    char fullpath[PATH_MAX]; 
    struct stat st; 

    if(argc > 1) { 
    if((d = opendir(argv[1])) == NULL) return 1; 
    } else 
    return 2; 

    while ((e = readdir(d)) != NULL) { 
    snprintf(fullpath, PATH_MAX, "%s/%s", argv[1], e->d_name); 
    if((stat(fullpath, &st)) == 0) 
     printf("Did stat(%s) and got block count %u.\n", 
     fullpath, st.st_blocks); 
    } 
}