Lire un fichier en C dont je ne connait pas l'extension

benrad Messages postés 4 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 16 octobre 2007 - 15 oct. 2007 à 15:10
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 18 oct. 2007 à 20:39
Bonjour

j'ai un fichier avec une extension .dld
je suis en train de bosser sur une dll en C

J'aurais voulu savoir comment je pouvais stocker le contenu du fichier .dld dans un char* .

j'effectue un fread mais je ne recupere que les 8 premiere caracteres et ensuite plus rien. Il y a un Nul apres c 8 premiere caracter dans le fichier si je le lis dans notepad.

comment faire pour recuperer l'integralité du fichier?

le contenu du fichier qui devrait etre dans un char* va etre ensuite encodé en base64

merci

7 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
15 oct. 2007 à 16:35
Ce n'est pas le null qui stop la lecture.
Il faut que tu boucles tant que tu n'as pas atteint la fin du fichier.

FILE *fp ...

fp = fopen(....);

while(!feof(*fp))
{
   fread(...);
}

fclose(fp);

Shell
0
benrad Messages postés 4 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 16 octobre 2007
15 oct. 2007 à 17:53
Hello DeathCrash

pas mieux avec la boucle

sur le while(!feof(*fp))

vs m'a gueulé dessus en me disant mpossible de convertir File en File*
du coup j'ai essayé avec : while(!feof(fp))
en debug  ca fait 2 tour dans la boucle et en fait je recupere toujours la meme chaine.

je vais continuer mes recherches, merci pour l'aide
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
15 oct. 2007 à 18:00
char *lpBuffer;
int iSize;

fseek(fp, 0, SEEK_END);
iSize = ftell(fp);
fseek(fp, 0, SEEK_SET);

lpBuffer = malloc(iSize+1);
lpBuffer[fread(lpBuffer, 1, iSize, fp)] = 0;

lpBuffer contiendra tout ton fichier.

C++ (@++)<!--
0
benrad Messages postés 4 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 16 octobre 2007
16 oct. 2007 à 09:45
En fait je fais ça avec byte *buf ou char *buf

fp=fopen(



"fichier a lire"
,
"rb"
);fseek(fp,0,SEEK_END);


//go to end





//get position at end (length)

len=ftell(fp);






//go to beg.

fseek(fp,0,SEEK_SET);






//malloc buffer

buf=(byte *)malloc(len);






//read into buffer

fread(buf,len,1,fp);


 


fclose(fp);





free(buf);

Je recupere bien tous les caracteres de mon fichier dans le buffer, mais dans le buffer je recupere aussi tous les retours a la ligne et ca j'en voudrais pas il faudrait en fait que le contenu de mon fichier ne soit qu'un "mot" (tous les caracteres s'enchainent en fait)

Merci
0

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

Posez votre question
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
16 oct. 2007 à 13:31
Les retours a la ligne ne sont que des caractères spéciaux. Ton buffer contient tous les caractères. Tu peux pas faire autrement. Il te faut enlever manuellement les sauts de ligne si tu n'en veut pas, ainsi que les tabulations etc ...
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
18 oct. 2007 à 20:38
Salut,


Pour supprimer les caractères un fois le buffer lu, tu peux t'inspirer
du dernier code de cette page en remplaçant le while par un for( i = 0
; i < len ; i++)


Par contre, à la place de mettre  un caractère null à la fin, il
va falloire que tu sauvegardes le dernier id_write quelque part...

<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
18 oct. 2007 à 20:39
De CETTE page...

<hr size="2" width="100%" />3ème année en ecole d'ingé d'info cherche stage de 4 mois à partir du 01/04/08
0
Rejoignez-nous