C программа для печати имен каталогов в каталоге и исключить текущий каталог и родительский каталог

У меня есть программа, которая распечатывает все каталоги, перечисленные внутри определенного каталога, проверяя, что 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

3 ответа

Решение

Сравнение строк в 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);
        }


    } 

Вам нужно использовать strcmp. Смотрите этот пост.

Проблема с вашим кодом в том, что вы используете != оператор на строках, который не является допустимым в C. Вы должны использовать strcmp функция для сравнения двух строк. Если вы не знаете, как использовать strcmp функция, то вы можете Google об этом. Здесь кроется проблема,

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

Это может быть полезно.

Другие вопросы по тегам