IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

[Débutant][Win32] : Lecture ds un fichier ac buffer


Sujet :

Windows

  1. #1
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 10
    Par défaut [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 : 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

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    J'ai pas tout compris mais je ferais plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    swprintf(text, TEXT("%s%s"), tmp, buf); //je remplis le texte avec le texte précédent suivi du buffer
    car je crois %p recopie l'adresse du pointeur mais pas la chaîne de caractères qui y est rangée.
    Citation Envoyé par MSDN
    %p Pointer to void Prints the address pointed to by the argument in the form xxxx:yyyy where xxxx is the segment and yyyy is the offset, and the digits x and y are uppercase hexadecimal digits.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    je ne connais pas à l'avance la taille du fichier
    Simplifies-toi la tâche et maléiore les perfs en la récupérant dès le début avec GetFileSize.
    Puis tu alloue ton buffer et tu lis tout d'un coup.

  4. #4
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 10
    Par défaut
    Ok je vais faire ça merci du conseil (merci également aux modéros pour avoir déplacé le sujet)

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Automatiser la lecture d'un fichier de configuration
    Par Longrais dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 08/12/2006, 11h31
  2. [débutant]lecture d'un fichier properties
    Par Kuuei dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 10/11/2006, 11h35
  3. Réponses: 4
    Dernier message: 23/03/2006, 17h12
  4. méthode de lecture d'un fichier dans un buffer
    Par Mestoph dans le forum Composants VCL
    Réponses: 6
    Dernier message: 24/02/2006, 10h07
  5. Réponses: 6
    Dernier message: 23/02/2006, 12h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo