cs_jb60
Messages postés55Date d'inscriptionmardi 16 septembre 2003StatutMembreDernière intervention 4 août 2008
-
9 sept. 2004 à 23:04
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011
-
10 sept. 2004 à 01:25
Bonjour, c'est encore moi ;-)
Je me demande si lorsque l'on manipule un grand fichier (plusieurs Mo, voir même plusieurs Go) on peut mettre toutes les valeurs dans un buffer, à l'initialisation du programme, par exemple, et les garder en mémoire tout le temps qu'on utilise ce fichier au sein du programme.
Par exemple, avec un logiciel connu tel que Word, lorsque l'on ouvre un fichier énorme (par exemple avecplusieurs centaines de pages + des images, etc), je pense que le fichier est d'abord chargé en mémoire (donc tout le fichier), puis l'utilsateur ne modifie pas constamment ce fichier, mais plutôt un Buffer.
Est ce que c'est comme ça que l'on doit procéder? Ou plutôt faire un grand nombre d'accès au fichier (avec ReadFile et WriteFile) quand l'utilisateur change quelque chose dans la fenêtre d'édition?
Car pour des gros fichiers, la place en mémoire est assez conséquente (peut être même pas suffisante), je me trompe?
Moi je mettrais le tout dans un buffer au début, en lisant le fichier, que je fermerais tout de suite après, puis je rentrerais toutes les modifications nécessaires durant l'execution du programme, et ce n'est que quand l'utilisateur ferme le programme que je recopierai le buffer dans le fichier...
/* dison que le fichier est plutot gros */
memcpy( ptr+564123, tmp, sizeof(tmp));
/* etc ... */
/* etc ... */
/* etc ... */
/* attention, pas de ++ptr ou ptr+=num; etc ...
utiliser un autre pointeur pour faire ca;
char * ptr2 = ptr;
while ( *ptr2++ ) { ... } par exemple
*/
il y à aussi FlushMapViewOfFile() pour faire un flush ou deux si besoin sur le disque, etc ... faut juste faire attention de pas dépasser la taille du fichier sinon une exception est générée ...