0

如何在 c++/linux 中通过名称的一部分找到文件?文件全名可能像:

foo.db.1

或者

foo.db.2

如何通过部分名称“foo.db”找到文件,谢谢

4

3 回答 3

3

您的用例的 Posix 标准函数是glob(). 早些时候有人在 Stackoverflow 上发布了一个易于使用的 C++ 包装器。

于 2013-09-26T15:49:06.653 回答
2

例如:

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>

于 2013-09-26T15:41:53.337 回答
0

这样做:

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);
}
于 2013-09-26T15:44:40.143 回答