函数
<cstdio>

fread

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
从流中读取数据块
中读取一个包含 count 个元素的数组,每个元素大小为 size 字节,并将它们存储在 ptr 指定的内存块中。

流的位置指示器会按读取的总字节数向前移动。

如果成功,读取的总字节数为(size*count).

参数

ptr
指向一个大小至少为(size*count)字节的内存块的指针,转换为一个void*.
size
要读取的每个元素的大小(以字节为单位)。
size_t 是一个无符号整数类型。
count
元素数量,每个元素的大小为 size 字节。
size_t 是一个无符号整数类型。
stream
指向一个指定输入流的 FILE 对象的指针。

返回值

返回成功读取的元素总数。
如果这个数字与 count 参数不同,则说明在读取时发生了读取错误或到达了文件末尾。在这两种情况下,相应的指示器会被设置,可以分别用 ferrorfeof 进行检查。
如果 sizecount 为零,函数返回零,并且流的状态和 ptr 指向的内容都保持不变。
size_t 是一个无符号整数类型。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/* fread example: read an entire file */
#include <stdio.h>
#include <stdlib.h>

int main () {
  FILE * pFile;
  long lSize;
  char * buffer;
  size_t result;

  pFile = fopen ( "myfile.bin" , "rb" );
  if (pFile==NULL) {fputs ("File error",stderr); exit (1);}

  // obtain file size:
  fseek (pFile , 0 , SEEK_END);
  lSize = ftell (pFile);
  rewind (pFile);

  // allocate memory to contain the whole file:
  buffer = (char*) malloc (sizeof(char)*lSize);
  if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}

  // copy the file into the buffer:
  result = fread (buffer,1,lSize,pFile);
  if (result != lSize) {fputs ("Reading error",stderr); exit (3);}

  /* the whole file is now loaded in the memory buffer. */

  // terminate
  fclose (pFile);
  free (buffer);
  return 0;
}

此代码将myfile.bin加载到一个动态分配的内存缓冲区中,该缓冲区可用于将文件内容作为一个数组来操作。

另见