Fopen()

cs_JCpp Messages postés 334 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 3 juillet 2010 - 1 sept. 2003 à 20:15
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 1 sept. 2003 à 20:49
J’ai un pb pas bien méchant.

long lSize;
char * buffer;

FILE * pFile = fopen ("c:\\toto.txt", "r" );

while ( fgetc(pFile) !=EOF)
{
lSize = ftell (pFile);
rewind (pFile);
buffer = (char*) malloc (lSize);
fread (buffer,1,lSize,pFile);
}
fclose (pFile);

Mon pb c'est que j'obtiens :
coucouýýýý««««««««îþîþîþîþîþîþîþ
au lieu de coucou

Je me suis inspiré de cette source
http://www.cs.usyd.edu.au/~kev/pp/RESOURCES/cplusplus/ref/cstdio/fread.html

J’ai essayé une autre source, et j'obtiens tjs le même pb :
http://www.cs.usyd.edu.au/~kev/pp/RESOURCES/cplusplus/ref/cstdio/fread.html

Merci

http://perso.wanadoo.fr/iar/IAr_Projet.htm

6 réponses

guiguikun Messages postés 92 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 1 octobre 2003 1
1 sept. 2003 à 20:20
long lSize;
char * buffer;

FILE * pFile = fopen ("c:\\toto.txt", "r" );

lSize = ftell (pFile);
rewind (pFile);
buffer = (char*) malloc (lSize + 1);
memset(buffer,0,lSize+1);
fread (buffer,1,lSize,pFile);
strcat(buffer,"\0");

fclose (pFile);
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 sept. 2003 à 20:20
malloc (lSize); est dans la boucle, c'est voulu ???
BruNews, ciao...
0
cs_JCpp Messages postés 334 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 3 juillet 2010
1 sept. 2003 à 20:30
Zute la solution de guiguikun, ne fonctionne pas.
Wé, je pence que c’est un pb de \0 pour connaître la fin de la lecture du fichier

Normalement avec while ( fgetc(pFile) !=EOF), détecte la fin du fichier.

C’est pour cela que j’ai rajouter une boucle BruNews
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 sept. 2003 à 20:41
je te parle de l'alloc DANS la boucle.
Et aussi c'est exemple lit char apres char, faudra pas avoir un train a prendre sinon il partira seul.
BruNews, ciao...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
1 sept. 2003 à 20:47
Je te propose ma solution:

long lSize;
char * buffer;

FILE * pFile = fopen ("c:\\toto.txt", "r" );

lSize = ftell (pFile);
rewind (pFile);
buffer = (char*) malloc (lSize + 1);
fread (buffer,1,lSize,pFile);
buffer[lSize]='\0';

fclose (pFile);


Kaid - kaid.fr.st
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
1 sept. 2003 à 20:49
Et une autre:

char *pmem;
DWORD len, val;
HANDLE hfl = CreateFile("c:\\toto.txt",GENERIC_READ,0,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
if(hfl == INVALID_HANDLE_VALUE) return;
len = GetFileSize(hfl, 0);
pmem = (char*) malloc(len+1);
ReadFile(hfl, pmem, len, &val, 0);
CloseHandle(hfl);
pmem[len] = 0;
// affichage
free(pmem);

BruNews, ciao...
0
Rejoignez-nous