Tout d'abord, il faut que vous sachiez qu'on ne peut pas utiliser de chemins relatifs (à partir du dossier courant). Donc tous les noms de fichiers dans lesquels vous voudrez écrire ou lire devront être écrits en partant de la racine...
Les bases
Il faut commencer par inclure le header de FAT et stdio:
Code : C | #include <stdio.h>
#include <fat.h>
|
Puis on initialise FAT avec
bool fatInitDefault (void);
(ne vous arrêtez pas à
bool
, cette fonction marche très bien en C

).
Le reste est ce que vous avez déjà appris en C. En effet, pour créer une variable contenant un fichier on fait :
Code : C
Pour initialiser une variable il suffit de faire :
Code : C | fichier=fopen("fichier.ext","mode");
|
mode peut être "w", "wb", "r", "rb", "a", etc...
Pour fermer un fichier il faut écrire :
Code : C
Pour écrire dans un fichier, on utilisera
size_t fwrite(const void * contenu, size_t compte, size_t taille_du_contenu, FILE * fichier);
où
contenu est le texte à écrire dans le fichier,
compte est le nombre d'éléments (nous laisserons toujours 1),
taille_du_contenu est la taille du contenu, et où
fichier est le fichier.
Par exemple :
Code : C | FILE *fichier=fopen("test.txt","w");
fwrite("hello !",1,8,fichier);
|
Pour lire un fichier, c'est quasiment pareil

! On crée une chaîne de caractères vide, et on fait un appel à
fread qui prend les mêmes arguments que sa cousine
fwrite. Par exemple :
Code : C | char contenu[256];
FILE *fichier=fopen("test.txt","r");
fread(contenu,1,256,fichier);
/* Et voilà, la variable "contenu" contient le contenu du fichier test.txt ;) */
|
Lister les fichiers et les répertoires d'un dossier
On va inclure
fat.h, bien sûr, mais aussi
sys/dir.h pour lister le dossier courant.
On va écrire dans un fichier .txt le contenu du dossier.
Pour cela, on va devoir :
- Créer une variable de type stat (pas de typedef
donc il faudra mettre struct
). Cette variable va nous permettre de savoir si l'élément est un dossier ou un fichier.
- Créer un tableau de char qui contiendra le nom de l'élément en cours, ainsi qu'un autre tableau qui contiendra le texte à mettre dans le fichier .txt.
- Créer un pointeur de type DIR_ITER, cette variable représente le dossier que l'on va examiner (ici, le courant).
- Créer un pointeur de type FILE, c'est le fichier .txt de sortie.
- Initialiser PALib puis fat.
- Puis ouvrir le dossier avec diropen.
- Parcourir le dossier avec dirnext.
- Enfin, écrire le contenu du dossier dans notre fichier .txt.
Voici à quoi ressemble notre code :
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 | #include <PA9.h>
#include <fat.h>
#include <sys/dir.h>
int main(int argc, char ** argv)
{
struct stat st;
char buf[512]="",filename[256]="";
DIR_ITER* dir = NULL;
FILE *fichier=NULL;
PA_Init();
PA_InitVBL();
PA_InitText(0,0);
fatInitDefault();
dir=diropen("/"); // Lit le dossier courant
if (dir==NULL) // Le dossier n'a pas pu être lu
PA_OutputText(0,0,0,"Une erreur est survenue, réessayez.");
else
{
PA_OutputText(0,0,0,"Lecture du dossier en cours...");
fichier=fopen("liste.txt","w");
while (dirnext(dir,filename,&st) == 0)
{
// Si (st.st_mode&S_IFDIR) alors c'est un dossier, sinon c'est un fichier
sprintf(buf,"%s : %s\n",(st.st_mode&S_IFDIR?"Dossier":"Fichier"),filename);
fwrite(buf,1,sizeof(buf),fichier); // On écrit dans le fichier .txt
}
fclose(fichier);
PA_OutputText(0,0,1,"Lecture du dossier termniée !");
}
while (1)
PA_WaitForVBL();
return 0;
}
|