#define __CASCLIB_SELF__
#include "../CascLib.h"
#include "../CascCommon.h"
bool DirectoryExists(LPCTSTR szDirectory)
{
#ifdef CASCLIB_PLATFORM_WINDOWS
DWORD dwAttributes = GetFileAttributes(szDirectory);
if((dwAttributes != INVALID_FILE_ATTRIBUTES) && (dwAttributes & FILE_ATTRIBUTE_DIRECTORY))
return true;
#else
DIR * dir = opendir(szDirectory);
if(dir != NULL)
{
closedir(dir);
return true;
}
#endif
return false;
}
bool MakeDirectory(LPCTSTR szDirectory)
{
#ifdef CASCLIB_PLATFORM_WINDOWS
BOOL bResult = CreateDirectory(szDirectory, NULL);
return (bResult) ? true : false;
#else
return (mkdir(szDirectory, 0755) == 0);
#endif
}
DWORD ScanDirectory(
LPCTSTR szDirectory,
DIRECTORY_CALLBACK PfnFolderCallback,
DIRECTORY_CALLBACK PfnFileCallback,
void * pvContext)
{
#ifdef CASCLIB_PLATFORM_WINDOWS
CASC_PATH<TCHAR> SearchMask(szDirectory, _T("*"), NULL);
WIN32_FIND_DATA wf;
HANDLE hFind;
hFind = FindFirstFile(SearchMask, &wf);
if(hFind != INVALID_HANDLE_VALUE)
{
while(FindNextFile(hFind, &wf))
{
if(wf.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if(PfnFolderCallback != NULL)
{
if(!PfnFolderCallback(wf.cFileName, pvContext))
break;
}
}
else
{
if(PfnFileCallback != NULL)
{
if(!PfnFileCallback(wf.cFileName, pvContext))
break;
}
}
}
FindClose(hFind);
return ERROR_SUCCESS;
}
#else
struct dirent * dir_entry;
DIR * dir;
if((dir = opendir(szDirectory)) != NULL)
{
while((dir_entry = readdir(dir)) != NULL)
{
if(dir_entry->d_type == DT_DIR)
{
if(PfnFolderCallback != NULL)
{
if(!PfnFolderCallback(dir_entry->d_name, pvContext))
{
break;
}
}
}
else
{
if(PfnFileCallback != NULL)
{
if(!PfnFileCallback(dir_entry->d_name, pvContext))
{
break;
}
}
}
}
closedir(dir);
return ERROR_SUCCESS;
}
#endif
return ERROR_PATH_NOT_FOUND;
}