2013-01-02 4 views
0

Donc fread se comporte de façon inattendue sur Win7 x64.Windows fread comportement inattendu

file = fopen(path, "rb"); 
fseek(file, 0, SEEK_END); 
fileSize = ftell(file); 
fseek(file, 0, SEEK_SET); 
buffer = malloc(fileSize); 
length = fread(buffer, fileSize, 1, file); 

fread retourne 1 octet comme étant lu alors que (ferror et les deux feof retourner 0)

length = fread(buffer, 1, fileSize, file); 

fread retourne le même nombre d'octets lus comme fileSize. MSDN dit "La fonction fread lit jusqu'à compter les éléments de taille octets du flux d'entrée et les stocke dans le tampon." Ce que j'interprète comme signifiant que chaque morceau de code devrait lire la même quantité de données. Est-ce que quelqu'un sait pourquoi Fread ne fonctionne pas comme je l'attend?

Répondre

2

Ils lisent la même quantité de données. Le nombre d'octets lus est le paramètre size multiplié par le paramètre count. Ce qui est renvoyé est le nombre d'éléments lus. Dans le premier cas, vous avez demandé 1 élément de taille de fichier et il est retourné 1. Dans le second cas, vous avez demandé des éléments fileSize de taille 1 et il a renvoyé fileSize.

+0

merci beaucoup – Matt

1

fread renvoie "le nombre d'éléments complets réellement lus", pas le nombre d'octets lus.

Avec fread(buffer, fileSize, 1, file); vous lisez un élément de taille fileSize (et fread va donc revenir sur le succès 1) alors qu'avec fread(buffer, 1, fileSize, file); vous lisez fileSize les objets de taille 1 et il renvoie le nombre d'octets lus (comme vous » Ré attendu).