C 如何列出文件/目录的数量

C 如何列出文件/目录的数量,c,unix,C,Unix,我编写了这个函数,它实际列出了给定目录的内容。但是,我想让它告诉我有多少文件和多少目录。我试过这样的方法,但都不管用: if(dir->d_type == D_DIR) directories++; 这是我的密码。如何修改它: #include <stdio.h> #include <sys/types.h> #include <dirent.h> #include <sys/stat.h> int main (void) {

我编写了这个函数,它实际列出了给定目录的内容。但是,我想让它告诉我有多少文件和多少目录。我试过这样的方法,但都不管用:

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;
}
#包括
#包括
#包括
#包括
内部主(空){
DIR*d=opendir(“.”);
结构方向*dir;
如果(d!=NULL){
int文件,目录=0;
while(dir=readdir(d))
put(dir->d_name);//打印条目的实际名称
//关闭目录
(d)第(d)款;
}否则
perror(“无法打开目录”);
返回0;
}

我猜到了。以下是我的代码供将来参考(如果其他人需要):

#包括
#包括
#包括
#包括
内部主(空){
DIR*d=opendir(“.”);
结构方向*dir;
如果(d!=NULL){
int文件,目录=0;
而((dir=readdir(d))!=NULL){
if(dir->d_type==DT_REG)
文件++;
if(dir->d_type==DT_dir)
目录++;
}
//关闭目录
(d)第(d)款;
printf(“%i个文件和%i个目录\n\n”,文件,目录);
}否则
perror(“无此类目录”);
返回0;
}

“不工作”意味着它崩溃,而是打印出您的密码,或者不产生(明显正确的)结果?无论如何,请尝试使用宏
if(S_ISDIR(S.st_模式))
。阅读
ls
的源代码,这会增加
文件,但不会增加
目录。我知道。我后来补充说。这只是另一个假设。但是在这里。我将把它添加到代码中。
#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;
}