2015-05-07 3 views
0

Может ли кто-нибудь сказать мне, правильно ли я сделал это, чтобы найти количество файлов и поддиректорий в каталоге? Кроме того, как я могу подтвердить это в терминале?C: Как подсчитать количество файлов и подкаталогов в каталоге

main(int n, char *path[]){ 
//count the number of files and subdirectories 
int fileCount = 0; 
int dirCount = 0; 
DIR *dp; 
struct dirent *dir; 

    int i; 
    for(i = 1; i < n; i++){ 
     dp = opendir(path[i]); 
     if(dp==NULL) 
      continue; 
     while((dir = readdir(dp)) != NULL){ 
      if(dir->d_type == DT_REG){ 
       fileCount++; 
      } 
      if(dir->d_type == DT_DIR) 
       dirCount++; 
     } 
     printf("%s: file count is: %d and dir count is: %d\n",path[i], fileCount, dirCoun$ 
    } 
// printf("file count is: %d and dir count is: %d", fileCount, dirCount); 

closedir(dp); 
} 
+0

Вы можете проверить его, фактически перейдя в один из каталогов и указав все файлы там. Не забудьте также указывать скрытые файлы и каталоги, так как ваша программа тоже их подсчитывает (включая каталоги '.' И '..'). –

+0

@JoachimPileborg, но есть ли команда, которая будет перечислять количество файлов или поддиректорий каталога? Я думаю, что мой код неправильный, потому что, когда я фактически показываю файлы, мой счет кажется коротким ... –

+1

Если вы на деле. Linux или OSX, список с помощью 'ls -Fa', в котором будут показаны скрытые файлы, а также их категории (обычные файлы, каталоги, каналы и т. д.). Вы также можете сделать это, например. 'find/path/to/dir -maxdepth 1 -type d -o-type f | wc -l' считать все обычные файлы и каталоги в '/ path/to/dir'. –

ответ

0

Ваша программа выглядит законной (за исключением опечаток).

Чтобы проверить это на терминале после компиляции просто введите

$./program-name DIR

(например $./program-name . для текущего каталога).

Он будет считать файлы и каталоги, включая скрытые файлы, и. и .. специальный каталог. Он не будет повторяться внутри подкаталогов. * Команда NIX сосчитать файлы в директории (включая скрытые файлы) без рекурсии:

$find DIR -type f -maxdepth 1 | wc -l

Вместо этого для подсчета каталогов

$find DIR -type d -maxdepth 1 | wc -l

(Примечание: Вы должны добавить 1 в каталог count, так как каталог .. не будет засчитан)

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