Visual C++ et lecture de fichier

Signaler
Messages postés
30
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
7 novembre 2005
-
 Utilisateur anonyme -
J'ai des problemes avec les fichiers et C++.
Plus exactement Visual C++, ce que je cherche a faire c'est de lire un fichier et l'afficher ligne a ligne ds une fenetre.
Ca j'y arrive, le probleme est qu'avec VC++ il y a un raffraichissement des fenetres et le fichier que j'ai ouvert n'est lu qu'une seule fois.
Je pense que ca vient du fait que la position courrante du fichier n'est pas remise a jour mais c'est peut etre un autre probleme.

Pouvez vous m'aider SVP.

char* t1;
t1 = Doc->GetFileName();
FILE *file_name = fopen(t1, "r");

char* token;
int titi = 0;

if(file_name)
{
while (!feof(file_name)&& (titi<7))
{
fgets(t1,255,file_name);
titi++;
}

while (!feof(file_name))
{
fgets(t1,255,file_name);

pos += sprintf(t + pos,"%s",t1 );
token = strtok(t1," ");
while(token != NULL)
{
pos += sprintf(t + pos,"%s\n",token );
token = strtok(NULL," ");
}

}

fclose(file_name);
}

Pour vous donner une idee de la chose.

Merci d'avance.

Xakal

7 réponses

Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
"Ca j'y arrive, le probleme est qu'avec VC++ il y a un raffraichissement des fenetres et le fichier que j'ai ouvert n'est lu qu'une seule fois." << J'ai pas compris l'histoire des rafraichissements des fenetres sous VC specifikement, VC n'est qu'un ide, et jvoi pas ou est ton pb en fait, donne nous un peu plus de details, applic console ou fenetre ? Precise stp !

'Lut,

Avant le 2eme while, il faut replacer ton pointeur (de fichier) au debut du fichier (rewind(file_name);), car apres le premier while, il se trouve a la fin du fichier.

A quoi sert ta var titi ?

++
Messages postés
30
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
7 novembre 2005

Le raffraichissement :

Qd tu demandes un affichage a VC++ ds une scroll view, il y a une boucle infinie qui est lancee et tes calculs sont refait toutes les X sec, a l'oeil nu tu ne vois pas de clignottement mais en realite il y en a un.
Le probleme vient de la car je vois bien qu'au premier passage le fichier est lu mais apres il ne le relit jamais docn je suppose que VC++ crois que le fichier est tjs en fin de fichier et ne se remet pas a jour qd je refait une demande d'ouverture.

pour ce qui est de la variable titi elle sert a virer les 7 premieres lignes de mon fichier qui sont des commentaires ecrits par le programme qui me sort le fichier que je dois traiter avec mon pgme.

J'ai trouve une solution a mon pb, c'est pas beau mais ca a le merite de marcher.

je fais une copie du fichier et je lis ds la copie.
Ne me demandez pas pkoi ca marche mais ca marche.

Merci de votre reactivite.

Xakal

Ps: j'ai essaye le rewind et ca ne fait pas ce que je veux.
C'est sense remettre le compteur courrant a zero ?

Nop, rewind sert a remettre le pointeur au debut du fichier (avant le premier caractere si je ne me trompe pas)
Bah oui, le pointeur est a feof puisque pour sortir de ton while, tu lui dit while(!feof), donc quand il l'atteint, il sort.
C po qu'il croit, c que tu es en fin de fichier
On peut po appeler ca mise a jour, puis tu ne refait po de demande d'ouverture (avec fopen)
Tu ne fermes pas et ne rouvre po les fichier (c justement le role de rewind, eviter de faire ca)

Juntao
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
FILE*, fgets et autres flux n'ont rien a faire dans un prog win32.
Sers toi de API direct, code beaucoup plus leger et performance au bout.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
30
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
7 novembre 2005

Merci a tous.