2012-06-11 132 views
-1

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

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

+0

@JerryCoffin这应该是一个答案。 – JeremyP

+0

@JeremyP:好的,完成了。 –

回答

1

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

为了检查文件的类型(查看它是否是一个目录,以及是否应该递归搜索),您将需要stat(2)

你将要检查

(struct stat).st_mode & S_IFDIR 

,看是否该文件是一个目录。有关更多信息,请参阅<sys/stat.h>

0

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

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

1

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

相关问题