Paths and Files - 10.15 Extracting a Path from a Full Path and Filename (Page 2 of 4 )
Problem
You have the full path of a filename, e.g., d:\apps\src\foo.c, and you need to get the pathname, d:\apps\src.
Solution
Use the same technique as the previous two recipes by invoking rfind and substr to find and get what you want from the full pathname. See Example 10-23 for a short sample program.
Example 10-23. Get the path from a full path and filename
#include <iostream> #include <string>
using std::string;
string getPathName(const string& s) {
char sep = '/';
#ifdef _WIN32 sep = '\'; #endif
size_t i = s.rfind(sep, s.length()); if (i != string::npos) { return(s.substr(0, i)); }
return(""); }
int main(int argc, char** argv) {
string path = argv[1];
std::cout << "The path name is "" << getPathName(path) << ""\n"; }
Discussion
Example 10-23 is trivial, especially if you've already looked at the previous few recipes, so there is no more to explain. However, as with many of the other recipes, the Boost Filesystem library provides a way to extract everything but the last part of the filename with its branch_path function. Example 10-24 shows how to use it.