我试图更改此代码以在给定目录中查找特定文件,并使用opendir()声明它是文件还是目录;

我一直在寻找如何执行此操作已有一段时间,但是我似乎找不到或理解执行此操作的简单方法。

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

int main(int argc, char *argv[]){
    DIR *dp;
    struct dirent *dirp;

    if(argc==1)
        dp = opendir("./");
    else
        dp = opendir(argv[1]);

    while ( (dirp = readdir(dp)) != NULL)
        printf("%s\n", dirp->d_name);

    closedir(dp);
    return 0;
}

最佳答案

使用stat作为文件名(是串联的目录名和readdir返回的名称)。 while循环如下所示:

char *path = "./";
if (argc == 2) {
    path = argv[1];
}
dp = opendir(path);

while ((dirp = readdir(dp)) != NULL) {
    char buf[PATH_MAX + 1];
    struct stat info;
    strcpy(buf, path);
    strcat(buf, dirp->d_name);
    stat(buf, &info); /* check for error here */
    if (S_ISDIR(info.st_mode)) {
            printf("directory %s\n", dirp->d_name);
    } else if (S_ISREG(info.st_mode)) {
            printf("regular file %s\n", dirp->d_name);
    } else {
            /* see stat(2) for other possibilities */
            printf("something else %s\n", dirp->d_name);
    }
}


您将需要包括一些其他标题(在本示例中,sys/stat.hunistd.h用于statstring.h用于strcpystrcat)。

09-10 17:08