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);
}
}
Проблема с вашим кодом в том, что вы используете !=
оператор на строках, который не является допустимым в C. Вы должны использовать strcmp
функция для сравнения двух строк. Если вы не знаете, как использовать strcmp
функция, то вы можете Google об этом. Здесь кроется проблема,
if(entry->d_type == DT_DIR && entry->d_name != ".." && entry->d_name != ".")
Это может быть полезно.