///////////////////////////////////////////////////////////////////////////// // Rev 11/12/2003 // // // CREATEDIRECTORYTREE.C // --------------------- // // // Sylvain MARECHAL - sylvain.marechal1@libertysurf.fr ///////////////////////////////////////////////////////////////////////////// // // Create a whole path tree in one call, even if there is more than one // folder to create // ///////////////////////////////////////////////////////////////////////////// #ifdef _WIN32 #include #else // TO DO !!!! #endif #include #include #include #include #include #include #include "createdirectorytree.h" /*#define BOOL int #define TRUE 1 #define FALSE 0 extern int errno*/ #ifdef MAIN void main() { CreateDirectoryTree( "g:/toto\\tutu/titi\\tata/" ); } #endif ///////////////////////////////////////////////////////////////////////////// // // CREATEDIRECTORYTREE ///////////////////////////////////////////////////////////////////////////// // // DESCRIPTION // --CreateDirectoryTree-- // ARGUMENTS // Argument1: char * pszDirectory // RETOUR/RESULTAT // int // REMARQUE // Rev 11/12/2003 ////////////////////////////////////////////////////////////////////////////// int CreateDirectoryTree( char * pszDirectory ) { struct stat buf; if( stat( pszDirectory, &buf ) != 0 && errno == ENOENT ) { int nRet = TRUE; char * pszTemp; int cb; pszTemp = strdup( pszDirectory ); if( pszTemp == NULL ) return FALSE; cb = strlen(pszTemp); if( pszTemp[cb-1] == '/' || pszTemp[cb-1] == '\\' ) { pszTemp[cb-1] = 0; cb --; } while( cb > 0 && pszTemp[cb-1] != '/' && pszTemp[cb-1] != '\\' && pszTemp[cb-1] != ':' ) { pszTemp[cb-1] = 0; cb --; } if( CreateDirectoryTree( pszTemp ) ) { if( mkdir( pszDirectory ) != 0 && errno != EEXIST ) nRet = -1; } free( pszTemp ); return nRet; } if( buf.st_mode & S_IFDIR ) return 0; return -1; }