65.9K
CodeProject is changing. Read more.
Home

CSplitPath

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.55/5 (9 votes)

Feb 17, 2000

viewsIcon

91285

A class that will split a complete path into its components.

Many times I have had the need to split a path into its components (who hasn't?). And every time I needed to do this I would use the venerable _splitpath() command. I often wondered why there isn't a class wrapper for this function. So here it is, CSplitPath. It's pretty much self-explanatory: Create an instance of the class with the path to split in the constructor. Then use the member functions to get the pieces you want.

It's that simple. Enjoy!


// Example usage
CSplitPath sp( "C:\\Temp\\Foo.txt" );
cout << "Drive: " << sp.GetDrive()
cout << "Directory: " << sp.GetDirectory();
cout << "File Name: " << sp.GetFileName();
cout << "Extension: " << sp.GetExtension();

The source code is very small and is as follows:

//////////////////////////////////////////////////////////////////////
// SplitPath.h : interface for the CSplitPath class.                //
// (c) 1999, Kevin Lussier                                          //
//////////////////////////////////////////////////////////////////////

#ifndef __SPLITPATH_H__
#define __SPLITPATH_H__

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

class CSplitPath
{ 
// Construction
public: 
    CSplitPath( LPCTSTR lpszPath = NULL );

// Operations
    BOOL    Split(LPCTSTR lpszPath );
    CString GetPath( void ) { return path_buffer; }
    CString GetDrive( void ) { return drive; }
    CString GetDirectory( void ) { return dir; }
    CString GetFileName( void ) { return fname; }
    CString GetExtension( void ) { return ext; }

// Attributes
protected:
    TCHAR path_buffer[_MAX_PATH];
    TCHAR drive[_MAX_DRIVE];
    TCHAR dir[_MAX_DIR];
    TCHAR fname[_MAX_FNAME];
    TCHAR ext[_MAX_EXT];
}; 

#endif  // __SPLITPATH_H__

//////////////////////////////////////////////////////////////////////
// SplitPath.cpp : implementation of the CSplitPath class.          //
// (c) 1999, Kevin Lussier                                          //
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "SplitPath.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

CSplitPath::CSplitPath( LPCTSTR lpszPath )
{
    // Initialize our objects
    memset( path_buffer, 0, sizeof( path_buffer ) );
    memset( drive, 0, sizeof( drive ) );
    memset( dir, 0, sizeof( dir ) );
    memset( fname, 0, sizeof( fname ) );
    memset( ext, 0, sizeof( ext ) );

    // If we were given a path, split it
    if ( lpszPath ) {
        Split( lpszPath );
    }
}

BOOL CSplitPath::Split( LPCTSTR lpszPath )
{
    // If we weren't given a path, fail
    if ( lpszPath == NULL ) {
        // Return failure
        return FALSE;
    }

    // Copy the path
    _tcsncpy( path_buffer, lpszPath, sizeof( path_buffer ) - 1 );
    // Split the given path
    _tsplitpath( path_buffer, drive, dir, fname, ext );

    return TRUE;
}