如何在c中搜索目录及其子目录中的文件?

时间:2012-06-11 15:01:16

标签: c linux file find

如何在C中搜索目录及其子目录中的文件? 我不允许使用find,我必须使用opendirreaddirstat

如果文件确实存在,我想执行类似命令ls -ln的操作。

3 个答案:

答案 0 :(得分:1)

要遍历目录,您需要:opendir(3)readdir(3)closedir(3)

要检查文件类型(查看它是否是目录以及是否应在其中递归搜索),您需要stat(2)

您需要检查

(struct stat).st_mode & S_IFDIR

查看该文件是否是目录。有关详细信息,请参阅<sys/stat.h>

答案 1 :(得分:1)

如果我们尝试在C中编写一小段代码,那么我们可以轻松地执行此搜索活动。 假设您需要在/ home / Jack /中搜索abc.txt,然后打开文件流并将文件路径作为参数传递。 现在,当执行此语句时,它将尝试打开现有文件。如果文件存在,此API将返回非零,否则返回-1或零。

答案 2 :(得分:0)

您已经提供了基本答案:opendir / readdir / closedir。在遍历目录条目时,检查每个目录条目是指文件还是目录。引用目录的那些,你也可以遍历(通常递归)。对于那些引用文件的人,你可以将他们的名字与你正在寻找的文件进行比较,看看你是否找到了它。

另一个小细节:您可能还想检查符号链接。符号链接可以(例如)引用父目录,它可以/可以导致无限递归。您可能希望完全忽略符号链接,或者您可能希望保留已经至少已经开始遍历的目录列表,并且仅在符号链接中解析/遍历符号链接中的内容。不在列表中。