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

时间:2017-03-08 19:38:18

标签: c file-exists

我已经看到了一些用于检查C中文件是否存在的方法。但是,我看过的所有内容都适用于特定的文件名。我想检查任何匹配特定模式的文件。例如,模式可能是“lockfile *”,“lockfileA”,“lockfile.txt”或“lockfile.abc”将在检查中注册。我目前这样做的方法是用opendir()打开目录,然后循环读取readdir()并尝试将模式与返回的每个文件的名称相匹配。它有效,但我确实希望有一种更紧凑的方式来做到这一点。有什么想法吗?

2 个答案:

答案 0 :(得分:6)

您可以使用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*'

应该给你锁定文件。

答案 1 :(得分:1)

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

对于文件的每个名称d_name,您可以查看它的长度,如果它至少包含8个字符,strcmp将8个第一个字符添加到 lockfile

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

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