2015-02-06 3 views
0

Я написал эту функцию, которая на самом деле перечисляет содержимое данной директории. Однако я хочу сказать, сколько файлов и сколько каталогов есть. Я пробовал такие вещи, но на самом деле это не работает:Как я могу указать количество файлов/каталогов

if(dir->d_type == D_DIR) 
    directories++; 

Вот мой код. Как его изменить:

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

int main (void) { 


    DIR *d = opendir ("."); 
    struct dirent *dir; 

    if (d != NULL) { 

     int files, directories = 0; 

     while(dir=readdir(d)) 
      puts(dir->d_name);//Prints the actual names of the entries 

     //Closing the directory 
     (void) closedir (d); 

    } else 
     perror ("Couldn't open the directory"); 

    return 0; 
} 
+1

«Не работает» означает, что он выходит из строя, печатает пароль вместо этого, или не дает (очевидно, правильный) результат? В любом случае попробуйте макрос 'if (S_ISDIR (s.st_mode))'. – usr2564301

+1

читает исходный код 'ls' –

ответ

0

Я понял. Вот мой код для будущих ссылок (если кто-то нуждается в этом):

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

int main (void) { 

    DIR *d = opendir ("."); 
    struct dirent *dir; 

    if (d != NULL) { 

     int files, directories = 0; 

     while((dir=readdir(d)) != NULL) { 

      if (dir->d_type == DT_REG) 
       files++; 
      if(dir->d_type == DT_DIR) 
       directories++; 
     } 

     //Closing the directory 
     (void) closedir (d); 

     printf("%i Files and %i directories\n\n", files, directories); 

    } else 
     perror ("No such directory"); 

    return 0; 
} 
+0

Это увеличивает' файлы', но никогда не увеличивает «каталоги». – Barmar

+0

Я знаю. Я добавил это позже. Это просто другое. Но здесь. Я добавлю его в код. –

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