10.15. Extracting a Path from a Full Path and Filename
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.
Example 10-24. Getting the base path
#include <iostream> #include <cstdlib> #include <boost/filesystem/operations.hpp> using namespace std; using namespace boost::filesystem; int main(int argc, char** argv) { // Parameter checking... try { path p = complete(path(argv[1], native)); cout << p.branch_path().string() << endl; } catch (exception& e) { cerr << e.what() << endl; } ...
Get C++ Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.