Add filtering folders in ScanDirectoryFiles and ScanDirectoryFilesRecursively

Add define FILTER_FOLDER for that purpose
Fix folder names matching filter being added to result
This commit is contained in:
foxblock 2024-09-01 23:31:51 +02:00
parent 5f49ec3d64
commit 6028447663
2 changed files with 34 additions and 4 deletions

View File

@ -194,6 +194,10 @@
#define MAGENTA CLITERAL(Color){ 255, 0, 255, 255 } // Magenta #define MAGENTA CLITERAL(Color){ 255, 0, 255, 255 } // Magenta
#define RAYWHITE CLITERAL(Color){ 245, 245, 245, 255 } // My own White (raylib logo) #define RAYWHITE CLITERAL(Color){ 245, 245, 245, 255 } // My own White (raylib logo)
// Filter string used in ScanDirectoryFiles, ScanDirectoryFilesRecursively and
// LoadDirectoryFilesEx to include directories in the result array
#define FILTER_FOLDER "/DIR"
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
// Structures Definition // Structures Definition
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------

View File

@ -3312,6 +3312,8 @@ static void ScanDirectoryFiles(const char *basePath, FilePathList *files, const
#endif #endif
if (filter != NULL) if (filter != NULL)
{
if (IsPathFile(path))
{ {
if (IsFileExtension(path, filter)) if (IsFileExtension(path, filter))
{ {
@ -3320,6 +3322,15 @@ static void ScanDirectoryFiles(const char *basePath, FilePathList *files, const
} }
} }
else else
{
if (TextFindIndex(filter, FILTER_FOLDER) >= 0)
{
strcpy(files->paths[files->count], path);
files->count++;
}
}
}
else
{ {
strcpy(files->paths[files->count], path); strcpy(files->paths[files->count], path);
files->count++; files->count++;
@ -3376,7 +3387,22 @@ static void ScanDirectoryFilesRecursively(const char *basePath, FilePathList *fi
break; break;
} }
} }
else ScanDirectoryFilesRecursively(path, files, filter); else
{
if (filter != NULL && TextFindIndex(filter, FILTER_FOLDER) >= 0)
{
strcpy(files->paths[files->count], path);
files->count++;
}
if (files->count >= files->capacity)
{
TRACELOG(LOG_WARNING, "FILEIO: Maximum filepath scan capacity reached (%i files)", files->capacity);
break;
}
ScanDirectoryFilesRecursively(path, files, filter);
}
} }
} }