在 C 中,检查是否存在名称与模式匹配的文件
In C, checking for existence of file with name matching a pattern
我见过几种检查 C 文件是否存在的方法。但是,我见过的所有方法都适用于特定的文件名。我想检查与特定模式匹配的任何文件。例如,模式可能是 "lockfile*" 并且 "lockfileA"、"lockfile.txt" 或 "lockfile.abc" 会在支票中注册。我目前这样做的方法是使用 opendir() 打开目录,然后循环遍历 readdir() 并尝试将模式与返回的每个文件的名称相匹配。它有效,但我肯定想要一种更紧凑的方法来做到这一点。有什么想法吗?
据我所知,应该这样做。
对于文件的每个名称 d_name
,您可以检查它的长度,如果它至少有 8 个字符,strcmp
那 8 个第一个字符到 lockfile.
您也可以使用 <regex.h>
进行检查。
至于迭代,我认为这是最好的方法。
您可以使用 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*'
应该给你锁文件。
我见过几种检查 C 文件是否存在的方法。但是,我见过的所有方法都适用于特定的文件名。我想检查与特定模式匹配的任何文件。例如,模式可能是 "lockfile*" 并且 "lockfileA"、"lockfile.txt" 或 "lockfile.abc" 会在支票中注册。我目前这样做的方法是使用 opendir() 打开目录,然后循环遍历 readdir() 并尝试将模式与返回的每个文件的名称相匹配。它有效,但我肯定想要一种更紧凑的方法来做到这一点。有什么想法吗?
据我所知,应该这样做。
对于文件的每个名称 d_name
,您可以检查它的长度,如果它至少有 8 个字符,strcmp
那 8 个第一个字符到 lockfile.
您也可以使用 <regex.h>
进行检查。
至于迭代,我认为这是最好的方法。
您可以使用 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*'
应该给你锁文件。