如何在 C 中搜索目录及其子目录中的文件?我不允许使用find
,我必须使用opendir
,readdir
和stat
.
ls -ln
如果文件确实存在,我想执行类似命令的操作。
要遍历目录,您将需要:opendir(3)、readdir(3)和closedir(3)。
要检查文件的类型(查看它是否是目录以及是否应该在其中递归搜索),您将需要stat(2)。
你会想要检查
(struct stat).st_mode & S_IFDIR
查看文件是否为目录。有关详细信息,请参阅<sys/stat.h>。
如果我们尝试用 C 编写一小段代码,那么我们可以轻松地完成这个搜索活动。假设您需要在 /home/Jack/ 中搜索 abc.txt,然后只需打开文件流并将文件路径作为参数传递。现在当这个语句将被执行时,它会尝试打开现有的文件。如果文件存在,此 API 将返回非零,否则返回 -1 或零。
您已经提供了基本答案:opendir
// readdir
。closedir
当您遍历目录条目时,您会检查每个条目是指文件还是目录。那些引用目录的,你也遍历(通常是递归的)。对于那些引用文件的人,您可以将它们的名称与您正在寻找的文件进行比较,看看您是否找到了它。
另一个小细节:您可能还想检查符号链接。符号链接可以(例如)引用父目录,这可能/可能导致无限递归。您可能想要完全忽略符号链接,或者您可能想要保留至少已经开始遍历的目录列表,并且仅当符号链接中的内容不在列表中时才解析/遍历它。