如果您的fread
生产线没有达到您的预期,我会查看fileLength
设置的任何内容。如果它的字节数超过了可以读取的字节数,那么fread
将返回零。
您需要记住的一件事是fread()
返回读取的项目数,而不是字节数(我的重点):
size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream);
成功时,fread()
返回读取的项目数。此数字等于仅当 size 为 1 时传输的字节数。
所以这两者是有区别的:
size_t n = fread (buffer, s, 1, fp);
size_t n = fread (buffer, 1, s, fp);
第一个是读取一个大小的元素,s
因此只会返回零或一。第二个是读取s
大小为 1 的元素,因此可以返回0..s
inclusive 的值。
如果您想一次读取尽可能多的字节,则可以使用后者:
char buff[128];
size_t sz;
FILE *fp = fopen ("name.ima", "rb");
if (fp != NULL) {
while ((sz = fread (buff, 1, sizeof (buff), fp)) > 0)
doSomethingWith (buffer, sz);
fclose (fp);
}