C程序打印目录中的目录名并排除当前目录和父目录
C program to print directory names in a directory and exclude current directory and parent directory
我有一个程序可以打印出特定目录中列出的所有目录,方法是检查 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
您需要使用 strcmp. See this post.
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 中 NOT 有效。您必须使用 strcmp
函数来比较两个字符串。如果您不知道如何使用 strcmp
功能,那么您可以 google 了解它。问题就出在这里,
if(entry->d_type == DT_DIR && entry->d_name != ".." && entry->d_name != ".")
This 可能会有帮助。
我有一个程序可以打印出特定目录中列出的所有目录,方法是检查 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
您需要使用 strcmp. See this post.
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 中 NOT 有效。您必须使用 strcmp
函数来比较两个字符串。如果您不知道如何使用 strcmp
功能,那么您可以 google 了解它。问题就出在这里,
if(entry->d_type == DT_DIR && entry->d_name != ".." && entry->d_name != ".")
This 可能会有帮助。