Simple glob in C++ on unix system? Simple glob in C++ on unix system? unix unix

Simple glob in C++ on unix system?


I have that in my gist. I created a stl wrapper around glob so that it returns vector of string and take care of freeing glob result. Not exactly very efficient but this code is a little more readable and some would say easier to use.

#include <glob.h> // glob(), globfree()#include <string.h> // memset()#include <vector>#include <stdexcept>#include <string>#include <sstream>std::vector<std::string> glob(const std::string& pattern) {    using namespace std;    // glob struct resides on the stack    glob_t glob_result;    memset(&glob_result, 0, sizeof(glob_result));    // do the glob operation    int return_value = glob(pattern.c_str(), GLOB_TILDE, NULL, &glob_result);    if(return_value != 0) {        globfree(&glob_result);        stringstream ss;        ss << "glob() failed with return_value " << return_value << endl;        throw std::runtime_error(ss.str());    }    // collect all the filenames into a std::list<std::string>    vector<string> filenames;    for(size_t i = 0; i < glob_result.gl_pathc; ++i) {        filenames.push_back(string(glob_result.gl_pathv[i]));    }    // cleanup    globfree(&glob_result);    // done    return filenames;}


I wrote a simple glob library for Windows & Linux (probably works on other *nixes as well) a while ago when I was bored, feel free to use it as you like.

Example usage:

#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();  }}


You can use the glob() POSIX library function.