.NODE

Extracting a Path from a Full Path and Filename

Problem

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

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 
#include 

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

 

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 
#include 
#include 

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

Sample output from Example 10-24 looks like this:

D:srcccbc10>binGetPathBoost.exe c:windowssystem321033
c:/windows/system32

 

See Also

Recipe 10.13 and Recipe 10.14

Building C++ Applications

Code Organization

Numbers

Strings and Text

Dates and Times

Managing Data with Containers

Algorithms

Classes

Exceptions and Safety

Streams and Files

Science and Mathematics

Multithreading

Internationalization

XML

Miscellaneous

Index

show all menu





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

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