c - 支持扩展名的文件通配

标签 c

对于我的学校项目,我正在尝试实现 *.jpg、*.c 等扩展名的文件通配。为此,我必须使用 readdir(2) 和 getdents(3) 等函数来读取当前目录中的所有文件,然后使用 strstr(3) 来匹配它们,然后将它们添加到传递给 exec(2) 的参数列表中。我不打算使用 glob (3)。我应该如何实现这个?

最佳答案

POSIX 提供了支持通配符的函数;标准 C 没有,而 Microsoft 的做法完全不同。

标题 <fnmatch.h> 和函数 fnmatch() 可能是答案的一部分;这允许您使用opendir() , readdir()closedir()扫描目录并根据 glob 模式匹配文件名的函数。

如果不是问题中的禁令,你可能会发现 <glob.h> header 和 glob() 功能比较合适。

您可以查看 <wordexp.h> 标题和 wordexp() 。这比 glob() 为您做更多的工作。确实如此,但如果不被禁止,会节省你很多精力。

通常,glob()是最有可能满足您的需要的一个。然而,既然这被排除了,也许你可以使用 fnmatch()它希望您从...获取文件名……实际上,它并不关心您从哪里获取文件名;它只是验证您提供的名称是否与您指定的文件名模式匹配。

如果您不打算使用其中任何一个,那么您将必须实现足够的正则表达式来匹配您期望识别的 shell glob,并且仍然使用 readdir()等等来检查可用的名称。

关于c - 支持扩展名的文件通配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13334610/

相关文章:

c - 这个语法是什么? (C 中变量类型的括号)

c - 流与缓冲区

c - 打印具有相同值的两个字符串文字给出相同的地址

c - 从字符数组中扫描整数

C - 使用 malloc 创建一个数组,然后循环遍历它

c++ - memcpy 每秒字节率

c++ - "size_t"是否使代码可移植,或者只是 'more' 可移植?

c - 未知尺寸错误

我可以将多个位域结构替换为 C 中的数组吗?

c - 将字符串数组的值传递给另一个函数