| #include "Path.h" |
| #include "String.h" |
| |
| void Replace(STRING str, char oldValue, char newValue) |
| { |
| int len = String::StrLen(str); |
| for ( int i = 0; i < len; i++) |
| if ( oldValue == *(i + str) ) *(i + str) = newValue; |
| } |
| |
| STRING Path::Combine(STRING path1, STRING path2) |
| { |
| //check that path1 ends with PATH_SEPARATOR |
| |
| //if not - append it |
| |
| UINT path1Length = String::StrLen(path1); |
| UINT path2Length = String::StrLen(path2); |
| bool appendPathSeparator = ( *PATH_SEPARATOR != *(path1 + path1Length - 1)); |
| |
| STRING result = (STRING)System::SafeAllocMemory(path1Length + path2Length + 2); |
| if ( 0 == result ) |
| return 0; |
| String::StrCpy(result, path1); |
| if ( appendPathSeparator ) |
| { |
| String::StrCat(result,PATH_SEPARATOR); |
| } |
| STRING tmpPath2 = String::StrDup(path2); |
| //replace other system's path separators with current |
| #ifdef WINDOWS |
| Replace(tmpPath2,*PATH_SEPARATOR_NIX_A, *PATH_SEPARATOR); |
| #else |
| Replace(tmpPath2, *PATH_SEPARATOR_WIN_A, *PATH_SEPARATOR); |
| #endif |
| String::StrCat(result, tmpPath2); |
| System::SafeFreeMemory(tmpPath2); |
| return result; |
| } |
| |
| |
| STRING Path::GetFileFolder(STRING filePath) |
| { |
| UINT len = String::StrLen(filePath); |
| while( len-- > 1) |
| if ( *PATH_SEPARATOR == *(filePath + len - 1) ) |
| break; |
| if ( 0 != len ) |
| { |
| STRING result = (STRING)System::SafeAllocMemory(len + 1); |
| String::StrNCpy(result, filePath, len); |
| return result; |
| } |
| else |
| return 0; |
| } |
| |
| bool Path::IsDirectory(STRING path) |
| { |
| if ( 0 == path) |
| return 0; |
| UINT len = String::StrLen(path); |
| return (*PATH_SEPARATOR == *(path + len - 1) ); |
| |
| } |
| |
| STRING Path::GetFileDirectory(STRING filePath){ |
| if ( 0 == filePath ) |
| return 0; |
| if ( IsDirectory(filePath) ) |
| return String::StrDup(filePath); |
| else { |
| UINT lastDelimiterIndx = String::LastIndexOf(PATH_SEPARATOR, filePath); |
| if ( lastDelimiterIndx == -1) |
| return 0; |
| STRING directory = (STRING)System::SafeAllocMemory(lastDelimiterIndx + 2 ); //+1 for ending 0, +1 for path_separator |
| String::StrNCpy(directory,filePath, lastDelimiterIndx + 1); |
| return directory; |
| } |
| } |