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