2015-06-21 17:33:46 +02:00
/*
Simple DirectMedia Layer
2025-01-01 07:45:41 -08:00
Copyright ( C ) 1997 - 2025 Sam Lantinga < slouken @ libsdl . org >
2015-06-21 17:33:46 +02:00
This software is provided ' as - is ' , without any express or implied
warranty . In no event will the authors be held liable for any damages
arising from the use of this software .
Permission is granted to anyone to use this software for any purpose ,
including commercial applications , and to alter it and redistribute it
freely , subject to the following restrictions :
1. The origin of this software must not be misrepresented ; you must not
claim that you wrote the original software . If you use this software
in a product , an acknowledgment in the product documentation would be
appreciated but is not required .
2. Altered source versions must be plainly marked as such , and must not be
misrepresented as being the original software .
3. This notice may not be removed or altered from any source distribution .
*/
/**
2024-05-16 10:44:37 -04:00
* # CategoryFilesystem
2015-06-21 17:33:46 +02:00
*
2025-01-05 14:11:11 -05:00
* SDL offers an API for examining and manipulating the system ' s filesystem .
* This covers most things one would need to do with directories , except for
* actual file I / O ( which is covered by [ CategoryIOStream ] ( CategoryIOStream )
* and [ CategoryAsyncIO ] ( CategoryAsyncIO ) instead ) .
*
* There are functions to answer necessary path questions :
*
* - Where is my app ' s data ? SDL_GetBasePath ( ) .
* - Where can I safely write files ? SDL_GetPrefPath ( ) .
* - Where are paths like Downloads , Desktop , Music ? SDL_GetUserFolder ( ) .
* - What is this thing at this location ? SDL_GetPathInfo ( ) .
* - What items live in this folder ? SDL_EnumerateDirectory ( ) .
* - What items live in this folder by wildcard ? SDL_GlobDirectory ( ) .
* - What is my current working directory ? SDL_GetCurrentDirectory ( ) .
*
* SDL also offers functions to manipulate the directory tree : renaming ,
* removing , copying files .
2015-06-21 17:33:46 +02:00
*/
2016-11-20 21:34:54 -08:00
# ifndef SDL_filesystem_h_
# define SDL_filesystem_h_
2015-06-21 17:33:46 +02:00
2022-11-26 20:43:38 -08:00
# include <SDL3/SDL_stdinc.h>
2024-04-04 18:38:21 +02:00
# include <SDL3/SDL_error.h>
2015-06-21 17:33:46 +02:00
2022-12-22 11:38:59 -05:00
# include <SDL3/SDL_begin_code.h>
2015-06-21 17:33:46 +02:00
/* Set up for C function definitions, even when using C++ */
# ifdef __cplusplus
extern " C " {
# endif
/**
2021-03-21 14:18:39 -04:00
* Get the directory where the application was run from .
2015-06-21 17:33:46 +02:00
*
2024-07-13 13:34:46 -04:00
* SDL caches the result of this call internally , but the first call to this
* function is not necessarily fast , so plan accordingly .
2015-06-21 17:33:46 +02:00
*
2022-11-26 00:01:17 +00:00
* * * macOS and iOS Specific Functionality * * : If the application is in a " .app "
* bundle , this function returns the Resource directory ( e . g .
2021-03-21 14:18:39 -04:00
* MyApp . app / Contents / Resources / ) . This behaviour can be overridden by adding
* a property to the Info . plist file . Adding a string key with the name
* SDL_FILESYSTEM_BASE_DIR_TYPE with a supported value will change the
* behaviour .
2015-06-21 17:33:46 +02:00
*
2021-03-21 14:18:39 -04:00
* Supported values for the SDL_FILESYSTEM_BASE_DIR_TYPE property ( Given an
* application in / Applications / SDLApp / MyApp . app ) :
2015-06-21 17:33:46 +02:00
*
2021-03-21 14:18:39 -04:00
* - ` resource ` : bundle resource directory ( the default ) . For example :
2021-03-24 10:47:03 -04:00
* ` / Applications / SDLApp / MyApp . app / Contents / Resources `
2021-09-28 17:03:06 +00:00
* - ` bundle ` : the Bundle directory . For example :
2021-03-24 10:47:03 -04:00
* ` / Applications / SDLApp / MyApp . app / `
2021-03-21 14:18:39 -04:00
* - ` parent ` : the containing directory of the bundle . For example :
2021-03-24 10:47:03 -04:00
* ` / Applications / SDLApp / `
2021-03-21 14:18:39 -04:00
*
2025-11-15 09:06:03 -08:00
* * * Android Specific Functionality * * : This function returns " ./ " , which allows filesystem operations to use internal storage and the asset system .
*
2022-11-14 17:34:22 -05:00
* * * Nintendo 3 DS Specific Functionality * * : This function returns " romfs "
2022-11-15 05:25:16 +00:00
* directory of the application as it is uncommon to store resources outside
* the executable . As such it is not a writable directory .
2022-11-14 17:34:22 -05:00
*
2023-12-27 20:21:11 +00:00
* The returned path is guaranteed to end with a path separator ( ' \\ ' on
2021-03-21 14:18:39 -04:00
* Windows , ' / ' on most other platforms ) .
*
* \ returns an absolute path in UTF - 8 encoding to the application data
* directory . NULL will be returned on error or when the platform
* doesn ' t implement this functionality , call SDL_GetError ( ) for more
* information .
*
2025-08-13 16:32:02 -04:00
* \ threadsafety It is safe to call this function from any thread .
*
2025-01-21 13:12:25 -05:00
* \ since This function is available since SDL 3.2 .0 .
2015-06-21 17:33:46 +02:00
*
* \ sa SDL_GetPrefPath
*/
2024-07-26 18:57:18 -07:00
extern SDL_DECLSPEC const char * SDLCALL SDL_GetBasePath ( void ) ;
2015-06-21 17:33:46 +02:00
/**
2021-03-21 14:18:39 -04:00
* Get the user - and - app - specific path where files can be written .
2015-06-21 17:33:46 +02:00
*
* Get the " pref dir " . This is meant to be where users can write personal
2021-03-21 14:18:39 -04:00
* files ( preferences and save games , etc ) that are specific to your
* application . This directory is unique per user , per application .
2015-06-21 17:33:46 +02:00
*
2021-07-14 17:07:04 -04:00
* This function will decide the appropriate location in the native
* filesystem , create the directory if necessary , and return a string of the
* absolute path to the directory in UTF - 8 encoding .
2015-06-21 17:33:46 +02:00
*
* On Windows , the string might look like :
*
2021-03-21 14:18:39 -04:00
* ` C : \ \ Users \ \ bob \ \ AppData \ \ Roaming \ \ My Company \ \ My Program Name \ \ `
*
2022-07-11 08:44:49 -07:00
* On Linux , the string might look like :
2021-03-21 14:18:39 -04:00
*
* ` / home / bob / . local / share / My Program Name / `
2015-06-21 17:33:46 +02:00
*
2022-11-25 16:00:06 -08:00
* On macOS , the string might look like :
2021-03-21 14:18:39 -04:00
*
* ` / Users / bob / Library / Application Support / My Program Name / `
*
* You should assume the path returned by this function is the only safe place
* to write files ( and that SDL_GetBasePath ( ) , while it might be writable , or
* even the parent of the returned path , isn ' t where you should be writing
* things ) .
*
* Both the org and app strings may become part of a directory name , so please
* follow these rules :
*
* - Try to use the same org string ( _including case - sensitivity_ ) for all
2021-03-24 10:47:03 -04:00
* your applications that use this function .
2021-03-21 14:18:39 -04:00
* - Always use a unique app string for each one , and make sure it never
2021-03-24 10:47:03 -04:00
* changes for an app once you ' ve decided on it .
2024-07-15 20:21:22 -04:00
* - Unicode characters are legal , as long as they are UTF - 8 encoded , but . . .
2021-03-21 14:18:39 -04:00
* - . . . only use letters , numbers , and spaces . Avoid punctuation like " Game
2021-03-24 10:47:03 -04:00
* Name 2 : Bad Guy ' s Revenge ! " ... " Game Name 2 " is sufficient.
2021-03-21 14:18:39 -04:00
*
2025-07-22 12:28:01 -04:00
* Due to historical mistakes , ` org ` is allowed to be NULL or " " . In such
* cases , SDL will omit the org subdirectory , including on platforms where it
* shouldn ' t , and including on platforms where this would make your app fail
* certification for an app store . New apps should definitely specify a real
* string for ` org ` .
*
2023-12-27 20:21:11 +00:00
* The returned path is guaranteed to end with a path separator ( ' \\ ' on
2021-03-21 14:18:39 -04:00
* Windows , ' / ' on most other platforms ) .
*
2024-06-14 02:09:55 -04:00
* \ param org the name of your organization .
* \ param app the name of your application .
2021-03-21 14:18:39 -04:00
* \ returns a UTF - 8 string of the user directory in platform - dependent
* notation . NULL if there ' s a problem ( creating directory failed ,
2024-07-27 03:59:43 +00:00
* etc . ) . This should be freed with SDL_free ( ) when it is no longer
* needed .
2021-03-21 14:18:39 -04:00
*
2025-08-13 16:32:02 -04:00
* \ threadsafety It is safe to call this function from any thread .
*
2025-01-21 13:12:25 -05:00
* \ since This function is available since SDL 3.2 .0 .
2015-06-21 17:33:46 +02:00
*
* \ sa SDL_GetBasePath
*/
2024-07-28 07:06:22 -07:00
extern SDL_DECLSPEC char * SDLCALL SDL_GetPrefPath ( const char * org , const char * app ) ;
2015-06-21 17:33:46 +02:00
2023-05-04 14:38:11 -04:00
/**
* The type of the OS - provided default folder for a specific purpose .
*
2024-04-09 00:49:23 -04:00
* Note that the Trash folder isn ' t included here , because trashing files
* usually involves extra OS - specific functionality to remember the file ' s
* original location .
2023-05-04 14:38:11 -04:00
*
2023-05-05 12:38:35 -04:00
* The folders supported per platform are :
*
2024-09-05 23:36:16 -04:00
* | | Windows | macOS / iOS | tvOS | Unix ( XDG ) | Haiku | Emscripten |
* | - - - - - - - - - - - | - - - - - - - | - - - - - - - - - | - - - - | - - - - - - - - - - | - - - - - | - - - - - - - - - - |
* | HOME | X | X | | X | X | X |
* | DESKTOP | X | X | | X | X | |
* | DOCUMENTS | X | X | | X | | |
* | DOWNLOADS | Vista + | X | | X | | |
* | MUSIC | X | X | | X | | |
* | PICTURES | X | X | | X | | |
* | PUBLICSHARE | | X | | X | | |
* | SAVEDGAMES | Vista + | | | | | |
* | SCREENSHOTS | Vista + | | | | | |
* | TEMPLATES | X | X | | X | | |
* | VIDEOS | X | X * | | X | | |
2023-05-05 12:38:35 -04:00
*
2024-04-08 22:36:57 -04:00
* Note that on macOS / iOS , the Videos folder is called " Movies " .
2023-05-05 12:38:35 -04:00
*
2025-01-21 13:12:25 -05:00
* \ since This enum is available since SDL 3.2 .0 .
2024-04-11 13:34:29 -04:00
*
2023-07-28 13:45:37 -04:00
* \ sa SDL_GetUserFolder
2023-05-04 14:38:11 -04:00
*/
2024-04-08 22:36:57 -04:00
typedef enum SDL_Folder
2023-05-04 14:38:11 -04:00
{
2024-09-11 08:08:18 -07:00
SDL_FOLDER_HOME , /**< The folder which contains all of the current user's data, preferences, and documents. It usually contains most of the other folders. If a requested folder does not exist, the home folder can be considered a safe fallback to store a user's documents. */
SDL_FOLDER_DESKTOP , /**< The folder of files that are displayed on the desktop. Note that the existence of a desktop folder does not guarantee that the system does show icons on its desktop; certain GNU/Linux distros with a graphical environment may not have desktop icons. */
SDL_FOLDER_DOCUMENTS , /**< User document files, possibly application-specific. This is a good place to save a user's projects. */
SDL_FOLDER_DOWNLOADS , /**< Standard folder for user files downloaded from the internet. */
SDL_FOLDER_MUSIC , /**< Music files that can be played using a standard music player (mp3, ogg...). */
SDL_FOLDER_PICTURES , /**< Image files that can be displayed using a standard viewer (png, jpg...). */
SDL_FOLDER_PUBLICSHARE , /**< Files that are meant to be shared with other users on the same computer. */
SDL_FOLDER_SAVEDGAMES , /**< Save files for games. */
SDL_FOLDER_SCREENSHOTS , /**< Application screenshots. */
SDL_FOLDER_TEMPLATES , /**< Template files to be used when the user requests the desktop environment to create a new file in a certain folder, such as "New Text File.txt". Any file in the Templates folder can be used as a starting point for a new file. */
SDL_FOLDER_VIDEOS , /**< Video files that can be played using a standard video player (mp4, webm...). */
SDL_FOLDER_COUNT /**< Total number of types in this enum, not a folder type by itself. */
2023-05-04 14:38:11 -04:00
} SDL_Folder ;
/**
2024-07-15 20:03:15 -04:00
* Finds the most suitable user folder for a specific purpose .
2023-05-04 14:38:11 -04:00
*
* Many OSes provide certain standard folders for certain purposes , such as
* storing pictures , music or videos for a certain user . This function gives
* the path for many of those special locations .
*
2023-07-28 13:45:37 -04:00
* This function is specifically for _user_ folders , which are meant for the
* user to access and manage . For application - specific folders , meant to hold
* data for the application to manage , see SDL_GetBasePath ( ) and
* SDL_GetPrefPath ( ) .
*
2024-04-30 16:57:17 -04:00
* The returned path is guaranteed to end with a path separator ( ' \\ ' on
* Windows , ' / ' on most other platforms ) .
*
2023-05-04 14:38:11 -04:00
* If NULL is returned , the error may be obtained with SDL_GetError ( ) .
*
2024-06-14 02:09:55 -04:00
* \ param folder the type of folder to find .
2024-06-13 18:10:28 -04:00
* \ returns either a null - terminated C string containing the full path to the
2023-05-04 14:38:11 -04:00
* folder , or NULL if an error happened .
*
2025-08-13 16:32:02 -04:00
* \ threadsafety It is safe to call this function from any thread .
*
2025-01-21 13:12:25 -05:00
* \ since This function is available since SDL 3.2 .0 .
2023-05-04 14:38:11 -04:00
*/
2024-07-26 18:57:18 -07:00
extern SDL_DECLSPEC const char * SDLCALL SDL_GetUserFolder ( SDL_Folder folder ) ;
2023-05-04 14:38:11 -04:00
2024-03-16 08:15:13 -07:00
/* Abstract filesystem interface */
2024-12-20 02:36:16 -05:00
/**
* Types of filesystem entries .
*
* Note that there may be other sorts of items on a filesystem : devices ,
* symlinks , named pipes , etc . They are currently reported as
* SDL_PATHTYPE_OTHER .
*
2025-01-21 13:12:25 -05:00
* \ since This enum is available since SDL 3.2 .0 .
2024-12-20 02:36:16 -05:00
*
* \ sa SDL_PathInfo
*/
2024-03-16 08:15:13 -07:00
typedef enum SDL_PathType
{
2024-03-18 08:43:22 -07:00
SDL_PATHTYPE_NONE , /**< path does not exist */
SDL_PATHTYPE_FILE , /**< a normal file */
2024-03-16 08:15:13 -07:00
SDL_PATHTYPE_DIRECTORY , /**< a directory */
2024-03-18 08:43:22 -07:00
SDL_PATHTYPE_OTHER /**< something completely different like a device node (not a symlink, those are always followed) */
2024-03-16 08:15:13 -07:00
} SDL_PathType ;
2024-12-20 02:36:16 -05:00
/**
* Information about a path on the filesystem .
*
2025-01-21 13:12:25 -05:00
* \ since This datatype is available since SDL 3.2 .0 .
2024-12-20 02:36:16 -05:00
*
* \ sa SDL_GetPathInfo
* \ sa SDL_GetStoragePathInfo
*/
2024-03-16 08:15:13 -07:00
typedef struct SDL_PathInfo
{
2024-09-11 08:08:18 -07:00
SDL_PathType type ; /**< the path type */
Uint64 size ; /**< the file size in bytes */
SDL_Time create_time ; /**< the time when the path was created */
SDL_Time modify_time ; /**< the last time the path was modified */
SDL_Time access_time ; /**< the last time the path was read */
2024-03-16 08:15:13 -07:00
} SDL_PathInfo ;
2024-05-14 06:47:58 -07:00
/**
2024-12-20 02:36:16 -05:00
* Flags for path matching .
2024-05-14 06:47:58 -07:00
*
2025-01-21 13:12:25 -05:00
* \ since This datatype is available since SDL 3.2 .0 .
2024-05-14 06:47:58 -07:00
*
* \ sa SDL_GlobDirectory
* \ sa SDL_GlobStorageDirectory
*/
typedef Uint32 SDL_GlobFlags ;
# define SDL_GLOB_CASEINSENSITIVE (1u << 0)
2024-03-16 08:15:13 -07:00
/**
2024-09-27 15:27:55 -04:00
* Create a directory , and any missing parent directories .
*
* This reports success if ` path ` already exists as a directory .
*
2024-09-27 22:55:29 +00:00
* If parent directories are missing , it will also create them . Note that if
* this fails , it will not remove any parent directories it already made .
2024-03-16 08:15:13 -07:00
*
2024-06-14 02:09:55 -04:00
* \ param path the path of the directory to create .
2024-09-18 15:33:11 +00:00
* \ returns true on success or false on failure ; call SDL_GetError ( ) for more
* information .
2024-03-16 08:15:13 -07:00
*
2025-08-13 16:32:02 -04:00
* \ threadsafety It is safe to call this function from any thread .
*
2025-01-21 13:12:25 -05:00
* \ since This function is available since SDL 3.2 .0 .
2024-03-16 08:15:13 -07:00
*/
2024-09-18 07:52:28 -07:00
extern SDL_DECLSPEC bool SDLCALL SDL_CreateDirectory ( const char * path ) ;
2024-03-16 08:15:13 -07:00
2024-09-27 22:28:47 -04:00
/**
* Possible results from an enumeration callback .
*
2025-01-21 13:12:25 -05:00
* \ since This enum is available since SDL 3.2 .0 .
2024-09-27 22:28:47 -04:00
*
* \ sa SDL_EnumerateDirectoryCallback
*/
typedef enum SDL_EnumerationResult
{
SDL_ENUM_CONTINUE , /**< Value that requests that enumeration continue. */
SDL_ENUM_SUCCESS , /**< Value that requests that enumeration stop, successfully. */
SDL_ENUM_FAILURE /**< Value that requests that enumeration stop, as a failure. */
} SDL_EnumerationResult ;
/**
* Callback for directory enumeration .
*
* Enumeration of directory entries will continue until either all entries
* have been provided to the callback , or the callback has requested a stop
* through its return value .
*
* Returning SDL_ENUM_CONTINUE will let enumeration proceed , calling the
* callback with further entries . SDL_ENUM_SUCCESS and SDL_ENUM_FAILURE will
* terminate the enumeration early , and dictate the return value of the
* enumeration function itself .
*
2025-01-16 13:20:18 +00:00
* ` dirname ` is guaranteed to end with a path separator ( ' \\ ' on Windows , ' / '
* on most other platforms ) .
2025-01-15 17:03:01 -05:00
*
2024-09-27 22:28:47 -04:00
* \ param userdata an app - controlled pointer that is passed to the callback .
* \ param dirname the directory that is being enumerated .
* \ param fname the next entry in the enumeration .
* \ returns how the enumeration should proceed .
*
2025-01-21 13:12:25 -05:00
* \ since This datatype is available since SDL 3.2 .0 .
2024-09-27 22:28:47 -04:00
*
* \ sa SDL_EnumerateDirectory
*/
typedef SDL_EnumerationResult ( SDLCALL * SDL_EnumerateDirectoryCallback ) ( void * userdata , const char * dirname , const char * fname ) ;
2024-03-16 08:15:13 -07:00
/**
2024-03-18 15:32:04 -04:00
* Enumerate a directory through a callback function .
*
* This function provides every directory entry through an app - provided
2024-04-04 13:41:27 +00:00
* callback , called once for each directory entry , until all results have been
2024-10-27 21:42:48 +00:00
* provided or the callback returns either SDL_ENUM_SUCCESS or
* SDL_ENUM_FAILURE .
2024-03-16 08:15:13 -07:00
*
2024-09-26 16:39:35 -04:00
* This will return false if there was a system problem in general , or if a
2024-10-27 21:42:48 +00:00
* callback returns SDL_ENUM_FAILURE . A successful return means a callback
* returned SDL_ENUM_SUCCESS to halt enumeration , or all directory entries
* were enumerated .
2024-09-26 16:39:35 -04:00
*
2024-06-14 02:09:55 -04:00
* \ param path the path of the directory to enumerate .
* \ param callback a function that is called for each entry in the directory .
* \ param userdata a pointer that is passed to ` callback ` .
2024-09-18 15:33:11 +00:00
* \ returns true on success or false on failure ; call SDL_GetError ( ) for more
* information .
2024-03-16 08:15:13 -07:00
*
2025-08-13 16:32:02 -04:00
* \ threadsafety It is safe to call this function from any thread .
*
2025-01-21 13:12:25 -05:00
* \ since This function is available since SDL 3.2 .0 .
2024-03-16 08:15:13 -07:00
*/
2024-09-18 07:52:28 -07:00
extern SDL_DECLSPEC bool SDLCALL SDL_EnumerateDirectory ( const char * path , SDL_EnumerateDirectoryCallback callback , void * userdata ) ;
2024-03-16 08:15:13 -07:00
/**
* Remove a file or an empty directory .
*
2024-09-26 19:25:34 -04:00
* Directories that are not empty will fail ; this function will not recursely
* delete directory trees .
*
* \ param path the path to remove from the filesystem .
2024-09-18 15:33:11 +00:00
* \ returns true on success or false on failure ; call SDL_GetError ( ) for more
* information .
2024-03-16 08:15:13 -07:00
*
2025-08-13 16:32:02 -04:00
* \ threadsafety It is safe to call this function from any thread .
*
2025-01-21 13:12:25 -05:00
* \ since This function is available since SDL 3.2 .0 .
2024-03-16 08:15:13 -07:00
*/
2024-09-18 07:52:28 -07:00
extern SDL_DECLSPEC bool SDLCALL SDL_RemovePath ( const char * path ) ;
2024-03-16 08:15:13 -07:00
/**
* Rename a file or directory .
*
2025-08-10 02:21:43 +00:00
* If the file at ` newpath ` already exists , it will be replaced .
2024-09-26 19:25:34 -04:00
*
* Note that this will not copy files across filesystems / drives / volumes , as
* that is a much more complicated ( and possibly time - consuming ) operation .
*
2024-09-26 23:29:38 +00:00
* Which is to say , if this function fails , SDL_CopyFile ( ) to a temporary file
* in the same directory as ` newpath ` , then SDL_RenamePath ( ) from the
2024-09-26 19:25:34 -04:00
* temporary file to ` newpath ` and SDL_RemovePath ( ) on ` oldpath ` might work
* for files . Renaming a non - empty directory across filesystems is
* dramatically more complex , however .
*
2024-06-14 02:09:55 -04:00
* \ param oldpath the old path .
* \ param newpath the new path .
2024-09-18 15:33:11 +00:00
* \ returns true on success or false on failure ; call SDL_GetError ( ) for more
* information .
2024-03-16 08:15:13 -07:00
*
2025-08-13 16:32:02 -04:00
* \ threadsafety It is safe to call this function from any thread .
*
2025-01-21 13:12:25 -05:00
* \ since This function is available since SDL 3.2 .0 .
2024-03-16 08:15:13 -07:00
*/
2024-09-18 07:52:28 -07:00
extern SDL_DECLSPEC bool SDLCALL SDL_RenamePath ( const char * oldpath , const char * newpath ) ;
2024-03-16 08:15:13 -07:00
2024-07-21 19:32:16 -07:00
/**
* Copy a file .
*
2024-09-26 19:25:34 -04:00
* If the file at ` newpath ` already exists , it will be overwritten with the
* contents of the file at ` oldpath ` .
*
* This function will block until the copy is complete , which might be a
2024-09-26 23:29:38 +00:00
* significant time for large files on slow disks . On some platforms , the copy
* can be handed off to the OS itself , but on others SDL might just open both
* paths , and read from one and write to the other .
2024-09-26 19:25:34 -04:00
*
* Note that this is not an atomic operation ! If something tries to read from
2024-09-26 23:29:38 +00:00
* ` newpath ` while the copy is in progress , it will see an incomplete copy of
* the data , and if the calling thread terminates ( or the power goes out )
2024-10-22 20:11:24 -04:00
* during the copy , ` newpath ` ' s previous contents will be gone , replaced with
2024-09-26 19:25:34 -04:00
* an incomplete copy of the data . To avoid this risk , it is recommended that
2024-09-26 23:29:38 +00:00
* the app copy to a temporary file in the same directory as ` newpath ` , and if
* the copy is successful , use SDL_RenamePath ( ) to replace ` newpath ` with the
* temporary file . This will ensure that reads of ` newpath ` will either see a
* complete copy of the data , or it will see the pre - copy state of ` newpath ` .
2024-09-26 19:25:34 -04:00
*
* This function attempts to synchronize the newly - copied data to disk before
* returning , if the platform allows it , so that the renaming trick will not
2024-09-26 23:29:38 +00:00
* have a problem in a system crash or power failure , where the file could be
* renamed but the contents never made it from the system file cache to the
* physical disk .
2024-09-26 19:25:34 -04:00
*
* If the copy fails for any reason , the state of ` newpath ` is undefined . It
* might be half a copy , it might be the untouched data of what was already
* there , or it might be a zero - byte file , etc .
*
2024-07-21 19:32:16 -07:00
* \ param oldpath the old path .
* \ param newpath the new path .
2024-09-18 15:33:11 +00:00
* \ returns true on success or false on failure ; call SDL_GetError ( ) for more
* information .
2024-07-21 19:32:16 -07:00
*
2025-08-13 16:32:02 -04:00
* \ threadsafety It is safe to call this function from any thread , but this
* operation is not atomic , so the app might need to protect
* access to specific paths from other threads if appropriate .
*
2025-01-21 13:12:25 -05:00
* \ since This function is available since SDL 3.2 .0 .
2024-07-21 19:32:16 -07:00
*/
2024-09-18 07:52:28 -07:00
extern SDL_DECLSPEC bool SDLCALL SDL_CopyFile ( const char * oldpath , const char * newpath ) ;
2024-07-21 19:32:16 -07:00
2024-03-16 08:15:13 -07:00
/**
* Get information about a filesystem path .
*
2024-06-14 02:09:55 -04:00
* \ param path the path to query .
2024-03-18 15:57:23 +00:00
* \ param info a pointer filled in with information about the path , or NULL to
2024-06-14 02:09:55 -04:00
* check for the existence of a file .
2024-09-18 15:33:11 +00:00
* \ returns true on success or false if the file doesn ' t exist , or another
* failure ; call SDL_GetError ( ) for more information .
2024-03-16 08:15:13 -07:00
*
2025-08-13 16:32:02 -04:00
* \ threadsafety It is safe to call this function from any thread .
*
2025-01-21 13:12:25 -05:00
* \ since This function is available since SDL 3.2 .0 .
2024-03-16 08:15:13 -07:00
*/
2024-09-18 07:52:28 -07:00
extern SDL_DECLSPEC bool SDLCALL SDL_GetPathInfo ( const char * path , SDL_PathInfo * info ) ;
2024-03-16 08:15:13 -07:00
2024-03-18 15:32:04 -04:00
/**
* Enumerate a directory tree , filtered by pattern , and return a list .
*
* Files are filtered out if they don ' t match the string in ` pattern ` , which
2025-06-03 15:31:53 +00:00
* may contain wildcard characters ` * ` ( match everything ) and ` ? ` ( match one
2024-03-18 15:32:04 -04:00
* character ) . If pattern is NULL , no filtering is done and all results are
* returned . Subdirectories are permitted , and are specified with a path
2025-06-03 15:31:53 +00:00
* separator of ` / ` . Wildcard characters ` * ` and ` ? ` never match a path
2024-03-18 15:32:04 -04:00
* separator .
*
2024-04-04 14:42:26 +00:00
* ` flags ` may be set to SDL_GLOB_CASEINSENSITIVE to make the pattern matching
* case - insensitive .
2024-03-18 15:32:04 -04:00
*
* The returned array is always NULL - terminated , for your iterating
* convenience , but if ` count ` is non - NULL , on return it will contain the
* number of items in the array , not counting the NULL terminator .
*
2024-06-14 02:09:55 -04:00
* \ param path the path of the directory to enumerate .
2024-04-04 13:41:27 +00:00
* \ param pattern the pattern that files in the directory must match . Can be
* NULL .
2024-04-04 07:40:48 -07:00
* \ param flags ` SDL_GLOB_ * ` bitflags that affect this search .
2024-04-04 13:41:27 +00:00
* \ param count on return , will be set to the number of items in the returned
* array . Can be NULL .
2024-03-18 15:32:04 -04:00
* \ returns an array of strings on success or NULL on failure ; call
2024-07-27 03:59:43 +00:00
* SDL_GetError ( ) for more information . This is a single allocation
* that should be freed with SDL_free ( ) when it is no longer needed .
2024-03-18 15:32:04 -04:00
*
* \ threadsafety It is safe to call this function from any thread .
2024-04-04 13:41:27 +00:00
*
2025-01-21 13:12:25 -05:00
* \ since This function is available since SDL 3.2 .0 .
2024-03-18 15:32:04 -04:00
*/
2024-07-28 07:06:22 -07:00
extern SDL_DECLSPEC char * * SDLCALL SDL_GlobDirectory ( const char * path , const char * pattern , SDL_GlobFlags flags , int * count ) ;
2024-03-18 15:32:04 -04:00
2024-11-27 19:41:37 -05:00
/**
* Get what the system believes is the " current working directory. "
*
* For systems without a concept of a current working directory , this will
* still attempt to provide something reasonable .
*
2024-11-28 04:42:44 +00:00
* SDL does not provide a means to _change_ the current working directory ; for
* platforms without this concept , this would cause surprises with file access
* outside of SDL .
2024-11-27 19:41:37 -05:00
*
2025-01-15 17:06:09 -05:00
* The returned path is guaranteed to end with a path separator ( ' \\ ' on
* Windows , ' / ' on most other platforms ) .
*
2024-11-27 19:41:37 -05:00
* \ returns a UTF - 8 string of the current working directory in
* platform - dependent notation . NULL if there ' s a problem . This
* should be freed with SDL_free ( ) when it is no longer needed .
2024-11-28 04:42:44 +00:00
*
2025-08-13 16:32:02 -04:00
* \ threadsafety It is safe to call this function from any thread .
*
2025-01-21 13:12:25 -05:00
* \ since This function is available since SDL 3.2 .0 .
2024-11-27 19:41:37 -05:00
*/
extern SDL_DECLSPEC char * SDLCALL SDL_GetCurrentDirectory ( void ) ;
2015-06-21 17:33:46 +02:00
/* Ends C function definitions when using C++ */
# ifdef __cplusplus
}
# endif
2022-12-22 11:38:59 -05:00
# include <SDL3/SDL_close_code.h>
2015-06-21 17:33:46 +02:00
2016-11-20 21:34:54 -08:00
# endif /* SDL_filesystem_h_ */