0

我有一个程序可以打印出特定目录中列出的所有目录,方法是检查d_type == DT_DIR

该程序工作,但也打印出父目录..和当前目录.

我试图设置一个 if 语句来检查它d_name != ".." or ".",但它仍然打印父目录和当前目录

这是我添加了 if 语句的代码

 directory = opendir("/home/user/adirectory");

    if(directory != NULL)
    {
        while(entry = readdir(directory)) {
            if(entry->d_type == DT_DIR && entry->d_name != ".." && entry->d_name != ".")
                printf("%s\n", entry->d_name);
        }


    }

不幸的是,这是输出,其中dir2是adirectory中的一个目录

..
dir2
.

我想要一个只显示没有点或两个点的目录的输出

dir2
4

3 回答 3

1

C 中的字符串比较可以使用strcmp函数完成。您不能使用 = 符号比较字符串。下面是使用 strcmp 更新的代码。

directory = opendir("/home/user/adirectory");

    if(directory != NULL)
    {
        while(entry = readdir(directory)) {
            if(entry->d_type == DT_DIR && strcmp(entry->d_name,"..")!=0 && strcmp(entry->d_name, ".")!=0)
                printf("%s\n", entry->d_name);
        }


    } 
于 2016-03-20T04:20:45.693 回答
1

您的代码的问题是您在 C 中无效的字符串上使用!=运算符。您必须使用函数来比较两个字符串。如果你不知道如何使用函数,那么你可以谷歌一下。问题出在这里,strcmpstrcmp

    if(entry->d_type == DT_DIR && entry->d_name != ".." && entry->d_name != ".")

可能会有所帮助。

于 2016-03-20T04:25:49.073 回答
1

您需要使用strcmp。看到这个帖子

于 2016-03-20T04:13:02.403 回答