C'est l'éternelle question, on la retrouve ici au moins 2 fois par mois.
Au vu de comment elle est exposée, ça sent le contre productif à fond. Vu que tu veux les stocker, tu auras donc tout le contenu du fichier en mémoire, inutile alors de faire des recopies.
Ce dont tu as besoin, c'est du nombre de lignes.
Code C/C++ :
1) Demander au system la taille du fichier (sizeFL).
2) Alloc buffer (pMem) de sizeFL + 1 rempli de zéros (VirtualAlloc sous Windows).
3) Ouverture fichier, lecture en 1 seule fois et fermeture illico.
4) Comptage des CHR(10):
DWORD i = sizeFL - 1;
DWORD nlines = 0;
do {
if(pMem[i] == 10) {
pMem[i] = 0;
nlines++;
}
} while(0 <= (long) --i);
5) Alloc tableau char* pLines de taille nlines.
6) DWORD pos = 0;
for(i = 0; i < sizeFL - 1; i++) {
if(pMem[i] == 0) pLines[pos++] = &pMem[i + 1];
}
Voila fini, on a le buffer contenant le texte et le tableau de pointeurs sur les différentes lignes.
Tout ceci s'effectuera ultra rapide sans aucune recopie.
En espérant qu'il n'y ait pas trop de fautes de frappe, la textbox du forum c'est pas l'idéal pour coder.
ciao...
BruNews, MVP VC++