请帮我写一段c语言代码,作用是2) 使用递归方法实现,向终端输出指定目录下所有子目录的文件名?
时间: 2024-03-12 15:44:43 浏览: 83
以下是一段使用递归方法实现输出指定目录下所有子目录的文件名的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>
#include <string.h>
void list_dir(const char *path) {
struct dirent *entry;
DIR *dir = opendir(path);
if (dir == NULL) {
return;
}
while ((entry = readdir(dir)) != NULL) {
if (entry->d_type == DT_DIR) {
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) {
continue;
}
printf("%s\n", entry->d_name);
char new_path[1024];
snprintf(new_path, sizeof(new_path), "%s/%s", path, entry->d_name);
list_dir(new_path);
} else {
printf("%s/%s\n", path, entry->d_name);
}
}
closedir(dir);
}
int main(int argc, char **argv) {
if (argc != 2) {
fprintf(stderr, "Usage: %s <dir>\n", argv[0]);
return 1;
}
list_dir(argv[1]);
return 0;
}
```
在这段代码中,我们首先定义了一个list_dir函数,用于实现递归读取指定目录下所有子目录的文件名。在list_dir函数中,我们首先使用opendir函数打开指定目录,然后使用readdir函数读取该目录下的所有目录项。如果读取到的是一个目录项,我们就继续递归调用list_dir函数,并输出该目录的文件名。如果读取到的是一个文件,我们就直接输出该文件的路径和文件名。
在main函数中,我们首先判断命令行参数的个数是否正确,如果不正确则输出错误提示信息。然后调用list_dir函数并传入指定的目录路径作为参数。
通过这段代码,我们可以轻松地输出指定目录下所有子目录的文件名。
阅读全文