Extracting a Path from a Full Path and Filename


You have the full path of a filename, e.g., d:appssrcfoo.c, and you need to get the pathname, d:appssrc.


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


using std::string;

string getPathName(const string& s) {

 char sep = '/';

#ifdef _WIN32
 sep = '\';

 size_t i = s.rfind(sep, s.length( ));
 if (i != string::npos) {
 return(s.substr(0, i));


int main(int argc, char** argv) {

 string path = argv[1];

 std::cout << "The path name is "" << getPathName(path) << ""



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


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;

Sample output from Example 10-24 looks like this:

D:srcccbc10>binGetPathBoost.exe c:windowssystem321033


See Also

Recipe 10.13 and Recipe 10.14

Building C++ Applications

Code Organization


Strings and Text

Dates and Times

Managing Data with Containers



Exceptions and Safety

Streams and Files

Science and Mathematics






C++ Cookbook
Secure Programming Cookbook for C and C++: Recipes for Cryptography, Authentication, Input Validation & More
ISBN: 0596003943
EAN: 2147483647
Year: 2006
Pages: 241

Flylib.com © 2008-2020.
If you may any questions please contact us: flylib@qtcs.net