Простой глобус в C ++ в Unix-системе? - PullRequest
27 голосов
/ 06 декабря 2011

Я хочу получить все подходящие пути, следующие этому шаблону в vector<string>:

"/some/path/img*.png"

Как я могу просто сделать это?

Ответы [ 5 ]

49 голосов
/ 23 декабря 2011

У меня есть это в моей сути.Я создал оболочку stl вокруг glob, чтобы он возвращал вектор строки и заботился о том, чтобы освободить результат globНе совсем очень эффективный, но этот код немного более читабелен, и некоторые скажут, что его легче использовать.

7 голосов
/ 06 декабря 2011

Вы можете использовать библиотечную функцию POSIX glob().

6 голосов
/ 21 декабря 2015

Я написал простую библиотеку glob для Windows и Linux (вероятно, работает и на других * nixes) некоторое время назад, когда мне было скучно, не стесняйтесь использовать ее как хотите.

Пример использования:

#include <iostream>
#include "glob.h"

int main(int argc, char **argv) {
  glob::Glob glob(argv[1]);
  while (glob) {
    std::cout << glob.GetFileName() << std::endl;
    glob.Next();
  }
}
1 голос
/ 11 апреля 2016

Я пробовал решения выше на Centos6, и я обнаружил, что мне нужно изменить:

int ret = glob(pat.c_str(), 0, globerr, &glob_result);

(где "globerr" - функция обработки ошибок)

Безпри явном 0 я получил ошибку "GLOB_NOSPACE".

0 голосов
/ 06 декабря 2011

Наиболее вероятно http://www.boost.org/doc/libs/release/libs/regex/ - ближайший, который вы получите. Есть большая вероятность, что это будет поддерживаться в C ++ 11.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...