Pourquoi est-fread atteindre les expressions du FOLKLORE au début?

Je suis en train d'écrire une bibliothèque C qui lit un fichier dans la mémoire. Il saute la première 54 octets du fichier (en-tête) et lit ensuite le reste des données. J'ai utiliser fseek pour déterminer la longueur du fichier, et ensuite utiliser fread à lire dans le fichier.

La boucle s'exécute une fois, puis se termine parce que les expressions du FOLKLORE est atteint (pas d'erreurs). À la fin, bytesRead = 10624, ftell(flux) = 28726, et le tampon contient 28726 valeurs. J'attends fread pour lire de 30 000 octets et la position dans le fichier à 30054 lorsque EOF est atteint.

C est pas ma langue maternelle donc je pense que j'ai un muet débutant erreur quelque part.

Code est comme suit:

const size_t headerLen = 54;

FILE * stream;
errno_t ferrno = fopen_s( &stream, filename.c_str(), "r" );
if(ferrno!=0) {
  return -1;
}

fseek( stream, 0L, SEEK_END );
size_t bytesTotal = (size_t)(ftell( stream )) - headerLen; //number of data bytes to read
size_t bytesRead = 0;
BYTE* localBuffer = new BYTE[bytesTotal];
fseek(stream,headerLen,SEEK_SET);
while(!feof(stream) && !ferror(stream)) {
    size_t result = fread(localBuffer+bytesRead,sizeof(BYTE),bytesTotal-bytesRead,stream);
    bytesRead+=result;
}

Selon la référence que vous utilisez, il est tout à fait évident que l'ajout d'un "b" à la mode indicateur est la réponse. La recherche de candidatures pour le bonehead-badge. 🙂

Cette référence en parle dans le deuxième paragraphe, deuxième phrase (mais pas dans leur tableau).

MSDN n'est pas de discuter de la binaire drapeau jusqu'à mi-chemin en bas de la page.

OpenGroup mentionne l'existence de la "b" de la balise, mais précise qu'il "n'a aucun effet".

  • J'ai ajouté le microsoft tag depuis fopen_s est seulement dans MS C de RTL.
  • OpenGroup ne mentionne: r ou rb - Ouvrir le fichier pour la lecture. ... Le caractère 'b' n'aura aucun effet, mais elle est autorisée par la norme ISO C conformité aux standards. Veuillez corriger votre modifier.
  • J'ai enlevé le microsoft tag.
  • Ayant constaté que la taille du fichier, et la mémoire allouée, Vous devriez être en mesure de lire l'intégralité du fichier, avec un fread.
InformationsquelleAutor James Schek | 2008-10-02