libcake 0.0.1
Librairie en C
file.h
Aller à la documentation de ce fichier.
1
7#ifndef __CAKE_FILE_H__
8#define __CAKE_FILE_H__
9
11#include "def.h"
12#include "strutf8.h"
14
15#ifdef CAKE_WINDOWS
16#include <windows.h>
17
18// ========== CONSTANTS ========== \\
19
20#define CAKE_FILE_ACCESS_READ GENERIC_READ
21#define CAKE_FILE_ACCESS_WRITE GENERIC_WRITE
22#define CAKE_FILE_ACCESS_APPEND FILE_APPEND_DATA
23#define CAKE_FILE_ACCESS_FOLDER FILE_LIST_DIRECTORY
24
25#define CAKE_FILE_SHARE_NOTHING 0x00
26#define CAKE_FILE_SHARE_DELETE FILE_SHARE_DELETE
27#define CAKE_FILE_SHARE_READ FILE_SHARE_READ
28#define CAKE_FILE_SHARE_WRITE FILE_SHARE_WRITE
29
30#define CAKE_FILE_OPEN_CREATE_ALWAYS CREATE_ALWAYS
31#define CAKE_FILE_OPEN_CREATE_IF_NOT_EXISTS CREATE_NEW
32#define CAKE_FILE_OPEN_ALWAYS OPEN_ALWAYS
33#define CAKE_FILE_OPEN_IF_EXISTS OPEN_EXISTING
34#define CAKE_FILE_OPEN_TRUNC_IF_EXISTS TRUNCATE_EXISTING
35
36#define cake_close_dir(x) FindClose(x)
37
38CAKE_C CAKE_API cake_bool cake_file_exists(const char *filename);
39CAKE_C CAKE_API cake_bool cake_delete_file(const char *filename);
40CAKE_C CAKE_API cake_bool cake_delete_folder(const char *pathname);
41
42#else
44#include <sys/types.h>
45#include <unistd.h>
46#include <dirent.h>
48
49typedef DIR *cake_dir;
50
51#define cake_close_dir(x) closedir(x)
52#define cake_file_exists(filename) (access(filename, F_OK) == 0)
53#define cake_delete_file(filename) unlink(filename)
54#define cake_delete_folder(pathname) rmdir(pathname)
55#endif
56
57
58// ========== TYPES ========== \\
59
60typedef cake_bool(*ListFileFilter)(Cake_String_UTF8 *filename, void *args);
61
62typedef struct cake_filesnapshot {
63 cake_fd dir;
64 #ifdef CAKE_WINDOWS
65 WIN32_FIND_DATAW dataw;
66 #endif
69
70typedef struct cake_list_filesnapshot {
72 ulonglong current;
73 ulonglong length;
75
79typedef struct cake_file {
80 cake_fd fd;
82 cake_mask accessMode;
83 cake_mask shareMode;
85
89typedef struct cake_folderwatcher {
93
94
95// ========== FILES AND FOLDERS ========== \\
96
100CAKE_C CAKE_API cake_bool __cake_open_file(Cake_File *dest, const char *filename, cake_mask accessMode, cake_mask shareMode, cake_mask openMode, cake_mask attributes);
101
111inline cake_bool cake_open_file(Cake_File *dest, const char *filename, cake_mask accessMode, cake_mask shareMode, cake_mask openMode) {
112 // TODO: Portage Linux
113#ifdef CAKE_WINDOWS
114 return __cake_open_file(dest, filename, accessMode, shareMode, openMode, FILE_ATTRIBUTE_NORMAL);
115#else
116
117#endif
118}
119
129inline cake_bool cake_open_folder(Cake_File *dest, const char *folderpath, cake_mask accessMode, cake_mask shareMode, cake_mask openMode) {
130 // TODO: Portage Linux
131#ifdef CAKE_WINDOWS
132 return __cake_open_file(dest, folderpath, accessMode | CAKE_FILE_ACCESS_FOLDER, shareMode, openMode, FILE_FLAG_BACKUP_SEMANTICS);
133#else
134
135#endif
136}
137
142CAKE_C CAKE_API void cake_close_file(Cake_File *file);
143
152CAKE_C CAKE_API inline cake_bool cake_file_read(Cake_File *file, void *buffer, cake_size size, cake_size *bytesRead) {
153 // TODO: Portage Linux
154#ifdef CAKE_WINDOWS
155 return ReadFile(file->fd, buffer, size, bytesRead, NULL);
156#else
157
158#endif
159}
160
169CAKE_C CAKE_API inline cake_bool cake_file_write(Cake_File *file, void *buffer, cake_size size, cake_size *bytesWritten) {
170 // TODO: Portage Linux
171#ifdef CAKE_WINDOWS
172 return WriteFile(file->fd, buffer, size, bytesWritten, NULL);
173#else
174
175#endif
176}
177
178
179// ========== FOLDER WATCHER ========== \\
180
187
188
189// ========== FILES LISTING ========== \\
190
191CAKE_C CAKE_API void cake_create_list_filesnapshot(Cake_List_FileSnapshot *list);
192CAKE_C CAKE_API cake_bool cake_list_filesnapshot_add(Cake_String_UTF8 *newPath, Cake_List_FileSnapshot *list);
193CAKE_C CAKE_API void cake_list_filesnapshot_remove_last(Cake_List_FileSnapshot *list);
194
195CAKE_C CAKE_API void cake_list_files_recursive(const char *path, Cake_List_String_UTF8 *files, Cake_List_String_UTF8 *folders, ListFileFilter filter, void *args);
196
202CAKE_C CAKE_API cake_bool cake_mkdirs(const char *filepath);
203
204#endif
Fichier contenant les types utilisés fréquemment par la librairie.
char cake_bool
Type sur 8 bits, utilisé principalement comme valeur de retour des fonctions pour indiquer si une err...
Definition: def.h:126
CAKE_C CAKE_API void cake_close_file(Cake_File *file)
Ferme un fichier ou un dossier ouvert.
Definition: file.c:421
CAKE_C CAKE_API cake_bool cake_mkdirs(const char *filepath)
Crée tous les dossiers du chemin passé.
Definition: file.c:247
cake_bool cake_open_file(Cake_File *dest, const char *filename, cake_mask accessMode, cake_mask shareMode, cake_mask openMode)
Ouvre un fichier.
Definition: file.h:111
struct cake_file Cake_File
Structure pour ouvrir, lire et écrire dans des fichiers.
CAKE_C CAKE_API cake_bool cake_file_read(Cake_File *file, void *buffer, cake_size size, cake_size *bytesRead)
Lit le contenu du fichier à partir de la position interne géré par l'OS.
Definition: file.h:152
CAKE_C CAKE_API cake_bool cake_file_write(Cake_File *file, void *buffer, cake_size size, cake_size *bytesWritten)
Écrit du contenu dans le fichier à partir de la position interne géré par l'OS.
Definition: file.h:169
CAKE_C CAKE_API cake_bool cake_folder_watcher_start(Cake_FolderWatcher *watcher)
Attend qu'un fichier situé dans le dossier voit son contenu modifié.
Definition: file.c:431
cake_bool cake_open_folder(Cake_File *dest, const char *folderpath, cake_mask accessMode, cake_mask shareMode, cake_mask openMode)
Ouvre un dossier.
Definition: file.h:129
CAKE_C CAKE_API cake_bool __cake_open_file(Cake_File *dest, const char *filename, cake_mask accessMode, cake_mask shareMode, cake_mask openMode, cake_mask attributes)
Fonction interne, favoriser l'appel de cake_open_file ou cake_open_folder.
Definition: file.c:388
struct cake_folderwatcher Cake_FolderWatcher
Structure pour surveiller un dossier, par exemple lorsqu'un fichier a été modifié.
Structure pour ouvrir, lire et écrire dans des fichiers.
Definition: file.h:79
cake_fd fd
Descripteur du fichier.
Definition: file.h:80
Cake_String_UTF8 * filename
Nom du fichier en UTF-8, sous Windows, convertie temporairement en UTF-16 lors de l'ouverture du fich...
Definition: file.h:81
cake_mask shareMode
Détermine la façon dont l'ouverture du fichier est partagé avec les autres processus.
Definition: file.h:83
cake_mask accessMode
Détermine le mode d'accès au fichier.
Definition: file.h:82
Definition: file.h:62
Structure pour surveiller un dossier, par exemple lorsqu'un fichier a été modifié.
Definition: file.h:89
cake_bool(* callback)(Cake_String_UTF8 *filename)
Fonction de callback lorsque quelque chose a été détectée.
Definition: file.h:91
Cake_File folder
Le dossier à surveiller.
Definition: file.h:90
Definition: file.h:70
Tableau dynamique de chaînes de caractères encodées en UTF-8.
Definition: strutf8.h:28
Chaînes de caractères encodées en UTF-8.
Definition: strutf8.h:19
Fichier contenant le prototypes de tout ce qui touche aux chaînes de caractères UTF-8.