如何在C中搜索目录及其子目录中的文件?
我不允许使用find
,我必须使用opendir
,readdir
和stat
。
如果文件确实存在,我想执行类似命令ls -ln
的操作。
答案 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
。在遍历目录条目时,检查每个目录条目是指文件还是目录。引用目录的那些,你也可以遍历(通常递归)。对于那些引用文件的人,你可以将他们的名字与你正在寻找的文件进行比较,看看你是否找到了它。
另一个小细节:您可能还想检查符号链接。符号链接可以(例如)引用父目录,它可以/可以导致无限递归。您可能希望完全忽略符号链接,或者您可能希望保留已经至少已经开始遍历的目录列表,并且仅在符号链接中解析/遍历符号链接中的内容。不在列表中。