如何在 c++/linux 中通过名称的一部分找到文件?文件全名可能像:
foo.db.1
或者
foo.db.2
如何通过部分名称“foo.db”找到文件,谢谢
您的用例的 Posix 标准函数是glob()
. 早些时候有人在 Stackoverflow 上发布了一个易于使用的 C++ 包装器。
例如:
find /your/path -name "foo.db.*"
它将匹配/your/path
结构中名称为foo.db.<something>
.
如果后面的文本db.
总是一个数字,你可以这样做:
find /your/path -name "foo.db.[0-9]*"
您还可以使用ls
:
ls -l /your/path/ls.db.[0-9]
获取名称类似foo.db.<number>
或什至的文件
ls -l /your/path/ls.db.[0-9]*
获取名称类似的文件foo.db.<different numbers>
这样做:
find /filepath -name "foo.db*"
在 C/C++ 中,您可以这样做:
void findFile(const char *path)
{
DIR *dir;
struct dirent *entry;
char fileName[] = "foo.db";
if (!(dir = opendir(path)))
return;
if (!(entry = readdir(dir)))
return;
do {
if (entry->d_type == DT_DIR) {
char path[1024];
int len = snprintf(path, sizeof(path)-1, "%s/%s", path, entry->d_name);
path[len] = 0;
if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
continue;
if(strstr(fileName, entry->d_name) != NULL) {
printf("%s\n", "", entry->d_name);
}
findFile(path);
}
else
printf(" %s\n", "", entry->d_name);
} while (entry = readdir(dir));
closedir(dir);
}