【发布时间】:2013-09-26 15:40:11
【问题描述】:
如何在 c++/linux 中通过名称的一部分找到 a 文件? 文件全名可能如下:
foo.db.1
或
foo.db.2
如何通过部分名称“foo.db”找到文件,谢谢
【问题讨论】:
如何在 c++/linux 中通过名称的一部分找到 a 文件? 文件全名可能如下:
foo.db.1
或
foo.db.2
如何通过部分名称“foo.db”找到文件,谢谢
【问题讨论】:
您的用例的 Posix 标准函数是 glob()。早些时候有人发布了一个易于使用的 C++ 包装器here on Stackoverflow。
【讨论】:
例如:
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);
}
【讨论】: