Extracting a Filename from a Full Path


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


Employ the same technique as the previous recipe and use rfind and substr to find and get what you want from the full pathname. Example 10-21 shows how.

Example 10-21. Extracting a filename from a path


using std::string;

string getFileName(const string& s) {

 char sep = '/';

#ifdef _WIN32
 sep = '\';

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


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

 string path = argv[1];

 std::cout << "The file name is "" << getFileName(path) << ""



See the previous recipe for details on how rfind and substr work. The only thing noteworthy about Example 10-21 is that, as you probably are already aware, Windows has a path separator that is a backslash instead of a forward-slash, so I added an #ifdef to conditionally set the path separator.

The path class in the Boost Filesystem library makes getting the last part of a full pathnamewhich may be a file or directory nameeasy with the path::leaf member function. Example 10-22 shows a simple program that uses it to print out whether a path refers to a file or directory.

Example 10-22. Getting a filename from a 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.leaf( ) << " is a "
 << (is_directory(p) ? "directory" : "file") << endl;
 catch (exception& e) {
 cerr << e.what( ) << endl;


See the discussion in Recipe 10.7 for more information about the path class.

See Also

Recipe 10.15

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