Il pourrait être intéressant de stocker l'arborescence des fichiers dans une base de données. C'est un moyen original de contourner les limites du fat16

C'est une excellente idée, qui est à la base du futur système de fichier de Windows et aussi d'autres.
Cependant si la base de donnée est relationelle, ça va être dur de représenter des données hiérarchiques (c'est un problème vieux comme l'informatique et sans "bonne" solution, XML n'est pas la solution à ce problème caar XML ne sait faire que du hiérarchique. XML n'est qu'un retour aux vieilles bases hiérarchiques d'avant le relationnel). Vous pouvez utiliser pour ça des bases de données sémantiques (à base de RDF) comme
http://fr.wikipedia.org/wiki/SPARQL , mais là on est à la pointe de la recherche.
Il pourrait être intéressant de stocker l'arborescence des fichiers dans une base de données. C'est un moyen original de contourner les limites du fat16

Autre propal, j'ai commencé un driver Reactos Fat+ (FAT32 sans limitation à 2G pour la taille des fichiers).
Je peux le fournir à qui voudra le convertir en driver Freedos/Ludos. Il a un gros inconvénient l'heure de création du fichier n'est plus enregistrée ni la date de dernier accès en lecture.
On peut penser que l'heure de création et l'heure de dernière modif sont similaires et que la date de dernier accès en lecture n'a aucune importance.
Mon idée c'était de continuer à le modifier dans le sens du système de fichier BSD (ffs) pour répartir la FAT sur le disque de façon à:
- Améliorer les temps d'accès
- Diminuer la taille mémoire nécessaire (pour des disques modernes il faut des dizaines de méga-octets de RAM rien que pour la FAT ou l'équivalent en inodes)
Mais on peut l'utiliser comme ça
/* version classique FAT32 */
struct _FATDirEntry
{
unsigned char Filename[8], Ext[3];
unsigned char Attrib;
unsigned char lCase;
unsigned char CreationTimeMs;
unsigned short CreationTime,CreationDate,AccessDate;
unsigned short FirstClusterHigh; // higher
unsigned short UpdateTime; //time create/update
unsigned short UpdateDate; //date create/update
unsigned short FirstCluster;
unsigned long FileSize;
} __attribute__((packed));
/* version FAT+ */
struct _FATDirEntry
{
unsigned char Filename[8], Ext[3];
unsigned char Attrib;
unsigned char lCase;
unsigned char CreationTimeMs;
unsigned short CreationDate;
unsigned short FirstClusterHigh; // higher
unsigned short UpdateTime; //time create/update
unsigned short UpdateDate; //date create/update
unsigned short FirstCluster;
unsigned long long FileSize;
} __attribute__((packed));