C程序在目录中打印目录名并排除当前目录和父目录

时间:2016-03-20 04:02:23

标签: c linux directory dirent.h

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

该程序有效,但也打印出父目录..和curent目录.

我尝试设置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

3 个答案:

答案 0 :(得分:1)

您需要使用strcmp。请参阅this post

答案 1 :(得分: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);
        }


    } 

答案 2 :(得分:1)

您的代码问题在于您在C中 NOT 有效的字符串上使用!=运算符。您必须使用strcmp函数来比较两个字符串。如果您不知道如何使用strcmp功能,那么您可以谷歌了解它。这就是问题所在,

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

This可能会有所帮助。