Mon problème est simple : je veux récupérer le contenu d'un fichier (lecture en mode binaire donc aucun caractère n'est ignoré..)
Je voudrais ensuite determiner la taille de ce contenu, mais sans utiliser la variable dans laquelle j'ai stockée la taille du fichier pour effectuer l'allocation de mémoire nécessaire au stockage du contenu, ni strlen() car cette fonction s'arrête lorsqu'elle rencontre un '\0'
En fait de façon plus générale, comment determiner la taille d'une telle chaine dans le code:
Simple, ton problème est insoluble. C'était d'ailleurs prévisible dans l'énoncé, une "chaine" finit au 1er 0 rencontré.
Ce que tu as est un buffer contenant une suite d'octets, pas une chaine.
Dans pareil cas on peut faire comme dans les BSTR (String de VB et autres interprétés), on stocke la longueur dans les 2 ou 4 1ers octets du buffer.
(Sous Windows)
Ouvre le fichier via CreateFile Récupère la taille du fichier via GetFileSize Lis le fichier via ReadFile Ferme le fichier via CloseHandle ---
VB.NET is good ... VB6 is better
Le fichier je le lis et je recupère le contenu, ca c'est pas un problème... (d'ailleurs je suis sous windows mais dans le cas present je n'utilise pas les api w32... donc pas de CreateFile, ReadFile, etc.., je passe par fseek/ftell/fread/malloc)
Pourquoi ne veux-tu pas utiliser la fonction te donnant la taille du fichier (en sachant que c'est la seule qui permettrait de résoudre ton problème) ?
---
VB.NET is good ... VB6 is better
Vous n’avez pas trouvé la réponse que vous recherchez ?
non ce n'est pas la seule, la preuve celle que j'utilise depuis longtemps (et en deux lignes de codes!):
fseek(pfile, 0 SEEK_END); // Curseur a la fin du fichier
fsize ftell(pfile); // position courante du curseur taille du fichier
Pourquoi ne veux-tu pas utiliser la fonction te donnant la taille du fichier (en sachant que c'est la seule qui permettrait de résoudre ton problème) ?
d'autres part je ne veux contourner, mais résoudre mon problème! ^^
En fait mon problème principal est décrit a la fin du sujet...