#include /** quick check for file using findfirst */ static int AP_FileExists(const char * file) { struct _finddata_t myFinddata; long hFile; int ok = ((hFile = _findfirst( file, &myFinddata )) != -1L); if (ok) _findclose(hFile); return ((ok) && (!(myFinddata.attrib&_A_SUBDIR))) ; } /** quick check for directory using findfirst */ static int AP_DirExists(const char * dir) { if (!dir) return 0; // watch it, it's a pointer struct _finddata_t myFinddata; long hFile; // may be called with trailing '\\' int length = strlen(dir); if (dir[length-1]=='\\') { char* buf = new char [length+1]; strcpy(buf,dir); buf[length-1]=0; int ok = ( (hFile = _findfirst( buf, &myFinddata )) != -1L ); _findclose(hFile); delete [] buf; return (ok && (myFinddata.attrib&_A_SUBDIR)); } else { int ok = ( (hFile = _findfirst( dir, &myFinddata )) != -1L ); if (ok) _findclose(hFile); return (ok && (myFinddata.attrib&_A_SUBDIR)); } } /** check for drive with drive mask function */ inline bool AP_DriveExists(const char* path) { if (path==0) return false; if (path[0]==0) return false; if (strlen(path)<2) return false; if (path[1]!=':') return true; unsigned long uDriveMask = _getdrives(); int index = tolower(path[0])-'a'; return (uDriveMask & (1 << index))!=0; } /** make sure path exists (recursive). * must have a ''\\' behind the last entry */ static bool AP_MakePath(const char *path) { if (!path) return 0; // watch it, it's a pointer char dir[1024]; strcpy(dir,path); char *p = strrchr(dir,'\\'); if (p!=NULL) { *p=0; if (strlen(dir)<2) return true; if (!AP_DirExists(dir)) { AP_MakePath(dir); // create previous, if neccesary _mkdir(dir); // create this } } return true; } /** remove path recusively. * will remove only empty directories */ static bool AP_RemovePath(const char *path) { if (!path) return 0; // watch it, it's a pointer char tmp[1024]; strcpy(tmp,path); char *p = strrchr(tmp,'\\'); if (p!=NULL) { *p=0; if (strlen(tmp)>3) { AP_RemovePath(tmp); if (_rmdir(tmp)!=0) return true; } } return true; }