我需要在目录中查找文件和文件夹的数量。在尝试使用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);
}
[entry->d_name
将仅包含文件名,而不包含完整路径,因此,如果调用stat()
,它将失败,除非该文件恰好存在于当前目录中。
还要注意,您的代码不是递归的,因此它不会在子文件夹中计算内容。