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 :
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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
J'espère que j'ai été clair. Merci d'avance !
@+ Jonathan
Partager