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 : 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);
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