Ming Xuan
Ming Xuan

Reputation: 165

How can I assign boost::filesystem::directory_entry::path() value to a string?

I'm trying to write an algorithm that iterates recursively through a directory and compares each folder, sub-folder and file name to a user-defined regex object.

I've found this piece of code for the iteration part:

path p(FilePath);
for (directory_entry& x : recursive_directory_iterator(p))
    std::cout << x.path() << '\n';

Where Filepath is the directory path defined by the user at runtime.

It works great to print out paths on the console, but I can't figure out a way to use path() to do what I want, which would be to assign its value to a string and then compare that string to my regex object.

I've been looking at other member function in boost::filesystem::directory_entry but I'm not really having any luck so far.

Could anyone point me in the right direction?

Thanks.

EDIT:

I'm dumb.

Upvotes: 2

Views: 3896

Answers (1)

Werner Erasmus
Werner Erasmus

Reputation: 4076

It works great to print out paths on the console, but I can't figure out a way to use path() to do what I want, which would be to assign its value to a string and then compare that string to my regex object.

boost::path has got a string member that either performs a conversion to a string type, or returns a const reference to the underlying storage mechanism (typically std::string) (see boost path documentation). Therefore, just call:

x.path().string()

Also, you might want to add some braces behind your for loop:

path p(FilePath);
std::string temppath;
for (directory_entry& x : recursive_directory_iterator(p))
{
    temppath = x.path().string();
    std::cout << temppath << std::endl;
}

The way you structured the code, std::cout would not be called as part of the loop, but only after the loop completed in its entirety... classic bug!!!

Upvotes: 3

Related Questions