[Résolu][Débutant][Win32] : Lecture ds un fichier ac buffer
Bonjour à tous,
Je suis actuellement en train de découvrir l'APÏ win32 et j'étudie en ce moment les fonctions de lecture dans des fichiers. Voici ce que je veux faire : je fais un boucle qui lit dans mon fichier par paquets de 64 caractères et qui à chaque fois rajoute ces 64 caractères à la fin de la chaîne précédente, de manière à avoir à la fin de la boucle une chaîne contenant tous les paquets les uns à la suite des autres qui constituent la chaîne désirée (je ne connais pas à l'avance la taille du fichier).
Voici mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| DWORD bytes; //le nombre de bytes lus
const unsigned int bSize = 64; //la taille du buffer
WCHAR buf[bSize]; //le buffer qui va être rempli à chaque boucle
unsigned int i = 1; //le compteur
LPWSTR text = new WCHAR[0]; //le texte qui grandit à chaque passage
WCHAR BOM = 0xFEFF; /*le Byte Order Mark, je veux un fichier UNICODE (je sais, pas de TCHAR ni LPTSTR) car je suis sous CE */
BOOL ret = false; //la valeur de retour du ReadFile()
SetFilePointer(infos.handle, sizeof(WCHAR)*wcslen(&BOM), NULL, FILE_BEGIN); //je bouge pour passer le caractère BOM de début de fichier
while ((ret = ReadFile(infos.handle, &buf, sizeof(buf), &bytes, NULL)) != 0)
{
if (ret != 0 && (bytes == 0))
break; /*je sors de la boucle quand j'ai atteint la fin du fichier */
LPWSTR tmp = text; //je passe le texte sur un autre pointeur
text = new WCHAR[i*bSize]; //j'agrandis la taille du texte
swprintf(text, TEXT("%p%s"), tmp, buf); //je remplis le texte avec le texte précédent suivi du buffer
i++;
}
CloseHandle(infos.handle); |
Je ne comprends pas mon erreur... dans un fonction autre j'avais réussi sur le même principe mais je n'avais pas ce problème d'agrandir le texte à chaque fois. Quand je sors la fonction swprintf tout marche mais quand j'agrandis la variable text, ça ne doit pas toucher à tmp normalement, si ? Dans ce cas dois-je utiliser wcscpy() pour copier le contenu de text dans tmp avant d'agrandir text ? mais mes chaînes ne se terminent pas par null, je risque donc de ne pas pouvoir utiliser ceci...
J'espère que j'ai été clair. Merci d'avance !
@+ Jonathan