2016-12-22 8 views
-3

Я пытаюсь напечатать некоторые характеристики файлов внутри каталога (только те, которые начинаются с нижнего регистра). Однако, когда я выполняю следующий код, некоторые из них работают, а некоторые не. Похоже, что структура stat может работать некорректно, но пока я не смог определить ошибку.C - stat struct не работает должным образом

struct dirent *ep; 
DIR *dp;  
char* cwd; 
char buff[PATH_MAX + 1]; 
off_t tamTotal=0; 
struct stat archivo;  
char path[]="/home/edu/Escritorio/P7/practica7/prueba"; 

if(!(dp=opendir(path))){ 
    printf("Error.\n"); 
    exit(-1); 
} 

printf("\nFILES:\n"); 
while (ep = readdir (dp)){ 
    stat(ep->d_name, &archivo); 
    if(S_ISREG(archivo.st_mode)){ 
     if(!isupper(ep->d_name[0])){ 
      printf(" %s\n",ep->d_name); 
      printf(" Last modification date: %s \n",ctime(&archivo.st_mtime)); 
      printf(" i-no number: %lu \n",archivo.st_ino); 
      printf(" Blocks: %lu \n",archivo.st_blocks); 
      printf(" Size: %lu \n",archivo.st_size); 
     }  
    } 
} 

ВЫВОД:

enter image description here

+3

Ну, вы не проверяете возвращаемое значение 'stat', так как вы можете узнать, работает ли он« правильно »или нет? Я никогда не пойму, почему люди решают пропустить проверку ошибок, а затем переходят в Stack Overflow, спрашивая, почему их код ведет себя странно. –

+0

Возможно, прочитайте [stat] (https://linux.die.net/man/2/stat) и проверьте, что возвращаемое значение поможет –

+0

Действительно, это создает ошибку при создании структуры. Любые идеи почему? –

ответ

2

Скорее всего dirent структура возвращаемый readdir содержит только имя, а не каталог или полный путь.

В результате stat потерпит неудачу, что вы не заметите, потому что вы не проверяете его возвращаемое значение.

+0

Yep - точный обман http://stackoverflow.com/questions/34168266/why-is-stat-not-working -после-READDIR –

Смежные вопросы