Как найти количество и папку с файлами в каталоге - PullRequest
0 голосов
/ 17 июня 2020

Мне нужно найти количество файлов и папок в каталоге. Я использую компилятор MinGW до этого. Я пытался использовать d_type, но не смог скомпилировать свой код.

И меня не волнует "." и каталог "..". Я не хочу их вычислять.

Итак, я пишу такую ​​программу. Эта программа может легко найти, сколько файлов и папок в каталоге.

Но когда я даю новое имя папке вместо новой папки, новая папка (1). Эта программа вычисляет эти папки как файл.

Что я могу сделать? Я действительно застрял. Мне нужно найти, сколько файлов и сколько папок ...

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

int
main(int argc, char *argv[])
 {

int file_count = 0;
int dir_count = 0;
struct dirent * entry;
struct stat filestat;
size_t nfiles = 0, ndirs = 0;
DIR *dp;

if (argc != 2)
{
    printf("usage: put directory_name\n");
    exit(-1);
}


if ((dp = opendir(argv[1])) == NULL)
{
    printf("Error: can't open %s\n", argv[1]);
    exit(-2);
}

while ((entry= readdir(dp)) != NULL){

    if (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, "..")) {
        continue;
    }

     stat(entry->d_name,&filestat);

    if( S_ISDIR(filestat.st_mode) ){
      ndirs++;
      }
    else
       nfiles++;
}

closedir(dp);

  printf("%lu Files, %lu Directories\n", nfiles, ndirs);

return(0);
 }

1 Ответ

0 голосов
/ 17 июня 2020

entry->d_name будет содержать только имя файла, а не полный путь, поэтому при вызове stat() он завершится ошибкой, если только этот файл не существует в текущем каталоге.

Также обратите внимание, что ваш код не рекурсивный, поэтому он не будет считать содержимое вложенных папок.

...