Je déconseille d'utiliser un seul fichier plat pour des quantités théoriquement infinies de données.
Si vous avez une quantité de données théoriquement infinie, vous avez besoin d' un accès aléatoire , ce qui signifie plusieurs fichiers ou une base de données - ou un format de fichier plat indexé, ce qui implique de résoudre les problèmes d'indexation déjà résolus par les systèmes de fichiers ou une base de données.
Si vous répartissez vos morceaux sur plusieurs fichiers, obtenir le morceau à (-110, 5000) revient simplement à dire "% APPDATA% / game / map / -110 / 5000.dat" (ou un autre nom de fichier si vous le souhaitez). commencer à les comprimer). Les bases de données ont juste besoin d'une requête. Si un morceau n'a pas de données, vous ne pouvez tout simplement pas stocker quoi que ce soit. Un seul fichier plat n'offre pas la vitesse et la commodité d'un accès aléatoire dès le départ.
Dans un seul fichier de taille arbitraire, pour un accès aléatoire rapide, vous devez avoir une garantie pour la position de tout bloc de données, ce qui signifie utiliser un index (car une recherche binaire brute dans vos blocs de données nuit aux performances et créer une grille dans votre fichier avec des taches "vides" vous donne le problème de Byte56 ). Une fois que vous avez développé un système d'indexation, que vous lui donnez de l'efficacité et que vous écrivez vous-même une API, vous avez recréé quelque chose comme le système de fichiers ou une base de données. À moins que vous ne gagniez réellement quelque chose, cela ne vaut probablement pas l'investissement. Par exemple, Steam profite massivement de leurs formats de fichiers GCF / NCF.
Si vous voulez une certaine sécurité sur vos sauvegardes, il est toujours possible de le faire. Par exemple, vous pouvez crypter chaque bloc individuel. Afin d'éviter qu'ils ne soient supprimés, vous pouvez avoir un hachage central basé sur les données enregistrées existantes. Si les données enregistrées ne correspondent pas au hachage (et que votre programme n'a pas provoqué la modification), un morceau a été supprimé.