在C中,检查具有与模式匹配的名称的文件存在



我已经看到了一些检查文件中存在的方法。但是,我看到的所有内容都适用于特定的文件名。我想检查与特定模式匹配的任何文件。例如,也许模式为" lockfile*"one_answers" lockfilea"," lockfile.txt"或" lockfile.abc"将在支票中注册。我当前这样做的方式是使用opendir()打开目录,然后通过readdir()循环,然后尝试将模式与返回的每个文件的名称匹配。它有效,但我肯定想要一种更紧凑的方法来做到这一点。有什么想法吗?

您可以使用Glob(3)(由POSIX标准化)。您给它一个通配符模式,它将搜索文件系统以寻找匹配项。

示例:

#include <glob.h>
#include <stdio.h>
int main(int argc, char **argv)
{
   glob_t globbuf;
   if (0==glob(argv[1], 0, NULL, &globbuf)){
       char **a=globbuf.gl_pathv;
       puts("MATCHES");
       for(;*a;a++)
           puts(*a);
   }
   globfree(&globbuf);
}

运行:

./a.out 'lockfile*'

应该给您您的Lockfiles。

据我所知,这就是应该做的。

对于文件的每个名称 d_name,您可以检查其长度,如果它具有至少8个字符,则strcmp,将8个第一个字符to lockfile

您也可以使用<regex.h>进行该检查。

至于迭代,我相信这是他最好的方法。

最新更新