Lecture d un gros fichier texte [Résolu]

Signaler
Messages postés
65
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
11 décembre 2006
-
Amanobuo
Messages postés
65
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
11 décembre 2006
-
Salut !
J aimerai savoir quoi utiliser pour ouvrir un "gros" fichier texte (environ 5ko)
avec fread, ca passe pas, ou j ai mal passe mes parametres... ?

Sinon, savez vous comment ouvir un fichier texte d'une lettre ou un mot definie a un autre mot ou lettre definie (ex : de '@' à ';').

8 réponses

Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonjour,

D'accord pour ta methode Kenilyk mais pour le malloc je ferais :

char * buffer = (char*)malloc(sizefile + 1);

memset(buffer, 0, sizefile + 1);
ou
buffer[sizefile] = '\0'; /* apres la lecture */

car c'est un fichier texte et donc je pense qu'il va s'en servir comme tel...

Matt...
Messages postés
41
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
3 mars 2006

methode bourin si tu cherche pas les perfs :

FILE *file;
char c;
char buffer[5*1024]; //allocation en fonction de la taille de fichier (malloc)
UINT i=0;

m_text="";
m_hexa="";


file=fopen(m_file_path,"rb"); //read only


if(file==NULL)
{
return FALSE;
}


while(fscanf(file,"%c",&c)!=EOF)
{
buffer[i]=c,
i++;
}

fclose(file);

sinon t'as quoi pour fread ?

size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
tu a mis la bonne valeur dans size et count ?
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
5Ko un gros fichier ????, enfin... :

// ouvre le fichier
FILE *file=fopen("fichier.txt","rb");
// deplace le curseur a la fin
fseek(file,0,SEEK_END);
// taille du fichier
long sizeFile=ftell(file);
// on se repositionne au debut
fseek(file,0,SEEK_SET);
// allocation
char * buffer=(char*)malloc(sizeFile);
// lecture
fread(buffer,1,sizeFile,file);
// ferme le fichier
fclose(file);

KeniiyK
Messages postés
65
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
11 décembre 2006

ok, merci pour ces info !
cela marche tres bien,
cependant, quand je declare un char * buffer = (char*)malloc(sizefile + 1); dans ma fonction main, comment y acceder dans toutes mes autres fonctions (je ne peut pas declarer buffer en global, puisque il faut passer par main ou une autre fonction pour determiner sa taille).

Merci d avance :)
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonsoir,

Tu passes ton buffer dans l'appel de tes fonctions.N'oublie pas de liberer buffer quand tu ne t'en sers plus.

Matt...
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Statut
Membre
Dernière intervention
2 novembre 2007
2
Je ne suis pas du tout d'accord avec le '\0' en fin de buffer pour 2 raisons :
- on connait la taille donc pas besoin d'info en plus.
- imagine qu'il y ai déjà un '\0' dans le buffer par exemple dans un fichier binaire, ton '\0' ne sert plus a rien.

KeniiyK
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

bonsoir,

Ce n'est pas un fichier binaire, mais un fichier texte apparement... (et je l'ai précisé)

Matt...
Messages postés
65
Date d'inscription
mardi 24 février 2004
Statut
Membre
Dernière intervention
11 décembre 2006

re

C'est un fichier texte en effet.
Merci a vous tous pour ces info qui se completes bien ! j ai pu terminer cette partie de mon programme (en attendant de l optimiser, c'est deja un grand pas)

PS : 5Ko c'est pas mal pour un fichier texte (en nombre de caracteres), et le \0 fonctionne.

++