0
我试图递归搜索目录的文件和输出文件的目录,如果它匹配给定:递归搜索文件
static int *search(char *path, const char *request, int depth, bool verbose)
{
DIR *dir;
struct dirent *ent;
char *start_dir = strcmp(path, "/") == 0 ? "root" : path;
printf("\nStarting in '%s' directory..\n\n", start_dir);
if ((dir = opendir(path)) != NULL)
{
while ((ent = readdir(dir)) != NULL)
{
if (verbose == true)
{
printf("Searching directory %s for file %s\n", ent->d_name, request);
}
if (ent->d_type == DT_DIR)
{
if ((strlen(path) + strlen(ent->d_name) + 1) > PATH_MAX)
{
puts("Path to long, cannot continue..");
}
else
{
if (ent->d_name == DT_DIR && strcmp(ent->d_name, ".") != 0 &&
strcmp(ent->d_name, "..") != 0)
{
printf("%s\n", ent->d_name);
}
}
}
}
}
return 0;
}
这会工作,但它不会输出的文件或目录在目录里面。示例:
@ubuntu:~/bin/c/find-files$ ./utilis test/-V
Initialized to search for file: 'test'..
Starting in 'root' directory..
Searching directory vmlinuz.old for file test
Searching directory boot for file test
Searching directory home for file test
Searching directory libx32 for file test
Searching directory lib32 for file test
Searching directory lib64 for file test
Searching directory initrd.img for file test
Searching directory srv for file test
Searching directory usr for file test
Searching directory . for file test
Searching directory cdrom for file test
Searching directory tmp for file test
Searching directory initrd.img.old for file test
Searching directory bin for file test
Searching directory .. for file test
Searching directory proc for file test
Searching directory lib for file test
Searching directory var for file test
Searching directory dev for file test
Searching directory sys for file test
Searching directory media for file test
Searching directory root for file test
Searching directory snap for file test
Searching directory run for file test
Searching directory sbin for file test
Searching directory opt for file test
Searching directory lost+found for file test
Searching directory mnt for file test
Searching directory vmlinuz for file test
Searching directory etc for file test
如何重构此函数以递归搜索所有目录和子目录中的给定文件名?
你可以做这样的事情,推目录堆栈中。如果没有找到,你可以弹出一个目录,“cd”,等等,就像实现一个BFS一样。 – lU5er
“*我如何重构此方法以便递归搜索*”何时您将调用算法(或其实现,也许作为函数)是“递归”? – alk
@alk取决于你想告诉我什么?我也用函数替换了方法,我的不好。 – chx28464