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