如何查找目录中文件的编号和文件夹

问题描述 投票:0回答:1

我需要在目录中查找文件和文件夹的数量。在尝试使用d_type之前,我正在使用MinGW编译器,但无法编译我的代码。

而且我不在乎“。”和“ ..”目录。我不想计算它们。

所以我编写了这样的程序。该程序可以轻松找到一个目录中有多少个文件和文件夹。

但是当我给新名称指定一个文件夹而不是“新文件夹”时,即“新文件夹(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);
 }
c io system-calls stat readdir
1个回答
0
投票

[entry->d_name将仅包含文件名,而不包含完整路径,因此,如果调用stat(),它将失败,除非该文件恰好存在于当前目录中。

还要注意,您的代码不是递归的,因此它不会在子文件夹中计算内容。

© www.soinside.com 2019 - 2024. All rights reserved.