Réponse acceptée !
Lire "ligne par ligne" est un non sens complet, c'est une ballade permanente du pointeur de fichier, contre productif absolu.
Projet de test suivant format de fichier fourni.
http://brunews.com/Brice.zip
#define _WIN32_WINNT 0x0600
#define _WIN32_IE 0x0700
#include <windows.h>
#include "bnIntA.h"
#define MEMDISPO (MEM_COMMIT | MEM_RESERVE | MEM_TOP_DOWN)
#define LINESIZE 22
char szfile[] = "Brc.txt";
void __stdcall RefaitFichier()
{
BYTE *pmem, *c, *d;
HANDLE hfl;
DWORD v, i, len;
hfl = CreateFile(szfile, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
if(hfl == INVALID_HANDLE_VALUE) return;
len = GetFileSize(hfl, 0);
if(GetLastError()) goto flCLOSE;
if(!len) goto flCLOSE; // FICHIER VIDE
i = len / LINESIZE; // i = NOMBRE DE LIGNES
if(len % LINESIZE) goto flCLOSE; // FICHIER INCOHERENT
pmem = (BYTE*) VirtualAlloc(0, len, MEMDISPO, PAGE_READWRITE);
if(!pmem) goto flCLOSE;
ReadFile(hfl, pmem, len, &v, 0);
if(v != len) goto relMEM; // ERREUR LECTURE
d = c = pmem;
len = 1;
fromFL:
d = bnultoa(len++, d);
c += 9;
v = 13; // 13 OCTETS A INSERER
do {
*d++ = *c++;
} while(--v);
if(--i) goto fromFL;
SetFilePointer(hfl, 0, 0, FILE_BEGIN);
WriteFile(hfl, pmem, d - pmem, &v, 0);
SetEndOfFile(hfl);
relMEM: VirtualFree(pmem, 0, MEM_RELEASE);
flCLOSE: CloseHandle(hfl);
}
#pragma comment(linker, "/entry:myWinMain")
__declspec(naked) void __stdcall myWinMain()
{
__asm {
call RefaitFichier
push 0
call dword ptr ExitProcess
}
}
exe fait 2,5 Ko.
ciao...
BruNews, MVP VC++