【问题标题】:recursive search for a file with a certain extension...C language [closed]递归搜索具有特定扩展名的文件...C语言[关闭]
【发布时间】:2020-05-11 12:08:03
【问题描述】:

谁能建议我如何使用系统调用对具有特定扩展名的文件进行递归搜索?我应该使用 opendir() 但我不太明白它是如何工作的以及如何递归地使用它。

【问题讨论】:

  • 您有什么特别不明白的地方?提供一个示例来说明您的问题所在。
  • 也许这会让你了解 opendir 的工作原理,github.com/b-k/21st-Century-Examples/blob/master/process_dir.c
  • 递归(函数调用自身)和迭代(函数使用循环来执行类似步骤的多次迭代,例如在循环中调用另一个函数)之间存在区别。
  • 在询问有关系统调用(或其他特定于操作系统的内容)的问题时,您应该始终准确地指定您所针对的操作系统。例如,我知道 glibc 中有一个 opendir() 函数(这表明你使用的是 linux),但由于我不熟悉 Windows,我不知道那里是否有同名的函数。指定操作系统使人们更容易给出适当的答案。
  • 在 Linux 上使用 nftw(3)

标签: c recursion system-calls


【解决方案1】:

我应该使用 opendir(),但我不太明白它是如何工作的以及如何递归地使用它。

习惯上,opendir()递归地使用,而是在循环中与readdir() 结合使用,迭代地列出文件,其中可以包括其他目录。

在循环中使用 opendir() 和 readdir() 查找文件的示例。 (from here)

此示例直接来自链接,strstr() 调用除外,用于提取具有您要查找的扩展名的文件。 (见代码中的注释):

#include <stdio.h>
#include <dirent.h>

int main()
{
    DIR *folder;
    struct dirent *entry;
    int files = 0;

    folder = opendir(".");
    if(folder == NULL)
    {
        perror("Unable to read directory");
        return(1);
    }

    while(entry=readdir(folder))
    {
        files++;
        if(strstr(entry->d_name, ".csv"))//Added to illustrate 
                                         //(change csv to extension you are looking for)
        {
            printf("File %3d: %s\n",
                files,
                entry->d_name);
        }

    }

    closedir(folder);

    return(0);
}

如果你的意思确实是递归,有一些ideas how to do that here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2011-08-21
    • 2011-08-24
    • 2012-11-29
    • 2012-12-16
    • 2011-02-14
    相关资源
    最近更新 更多