Réponse acceptée !
#define MEMDISPO (MEM_RESERVE | MEM_COMMIT)
char fname[264];
// on dit que tu as déjà récupéré fname
HANDLE hsrc, hdst;
DWORD size, d, s, lenbloc, npart;
BYTE *pmem;
char *pnm;
hsrc = CreateFile(fname, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN, 0);
if(hfl == INVALID_HANDLE_VALUE) {
// FAIRE ANNONCE ERREUR FICHIER INDISPONIBLE
return;
}
// FAIRE RECUP ICI de lenbloc
// QUI SERA TAILLE VOULUE POUR FICHIERS DECOUPES
// fname SERA MODIFIE MAIS RESTITUE EN SORTIE
pnm = fname + strlen(fname); // ON PLACE pnm SUR FIN DE fname
pmem = (BYTE*) VirtualAlloc(0, lenbloc, MEMDISPO, PAGE_READWRITE);
if(!pmem) {
// FAIRE ANNONCE ERREUR MEMOIRE
goto closeSRC;
}
*pnm++ = '.'; // pnm DISPO POUR nros DES MORCEAUX
npart = 0; // TU COMMENCES A 1 SI TU VEUX
fromSRC:
s = 0; ReadFile(hsrc, pmem, lenbloc, &s, 0);
if(!s) goto outSRC; // PLUS D'OCTETS = FIN DE FICHIER
ultoa(npart++, pnm, 10); // NOM DE MORCEAU DANS fname
hdst = CreateFile(fname, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
if(hdst == INVALID_HANDLE_VALUE) {
// FAIRE ANNONCE ERREUR CREATION FICHIER
goto outSRC;
}
// ON ECRIT LES s OCTETS LUS ET NON PAS lenbloc
d = 0; WriteFile(hdst, pmem, s, &d, 0);
CloseHandle(hdst);
if(d != s) {
// FAIRE ANNONCE ERREUR ECRITURE
goto outSRC;
}
// SI ENCORE POSSIBLES OCTETS ALORS ON RECOMMENCE
if(s >= lenbloc) goto fromSRC;
outSRC:
*(pnm - 1) = 0; // fname RESTITUE COMME ON L'ATROUVE
relMEM: VirtualFree(pmem, 0, MEM_RELEASE);
closeSRC: CloseHandle(hsrc);
// C'EST FINI
possibles erreurs de frappe, tu le dis si compilo fait la tronche.
ciao...
[ Lien ]
BruNews, MVP VC++