C语言中读写二进制文件使用 fread() 和 fwrite() 。
其实 fread() 和 fwrite()也可以用来读写字符文件,通常我们会选择效率更高的fgets()和fputs()。
fread() 函数用来从指定文件中读取块数据。所谓块数据,也就是若干个字节的数据,可以是一个字符,可以是一个字符串,可以是多行数据,并没有什么限制。
fread() 的原型为:
size_t fread ( void *ptr, size_t size, size_t count, FILE *fp );
fwrite() 函数用来向文件中写入块数据,它的原型为: fwrite()原型为:
size_t fwrite ( void * ptr, size_t size, size_t count, FILE *fp );
对参数的说明: - ptr 为内存区块的指针,它可以是数组、变量、结构体等。fread() 中的 ptr 用来存放读取到的数据,fwrite() 中的 ptr 用来存放要写入的数据。 - size:表示每个数据块的字节数。 - count:表示要读写的数据块的块数。 - fp:表示文件指针。 - 理论上,每次读写 size*count 个字节的数据。
size_t 是在 stdio.h 和 stdlib.h 头文件中使用 typedef 定义的数据类型,表示无符号整数,也即非负数,常用来表示实际读取或者写入的数量。
实例:
#include <stdio.h>
#include <stdlib.h>
#define N 1024 //定义缓冲区的大小
int main() {
int buff[N];
int size = sizeof(int);
FILE *fin;
FILE *fout;
if( (fin=fopen("e:\\test\\C罗.jpg", "rb+")) == NULL ){ //以二进制方式打开
puts("打开文件失败!");
exit(0);
}else{
//创建输出文件
fout=fopen("e:\\test\\dest.jpg", "wb+");
}
int len=-1; //每次读出来的字节长度
len= fread(buff, size, N, fin);
while(1){
printf("len is:%d\n",len);
//把buff内容写入到目标文件,读出多少个字节就写入多少个字节
fwrite(buff, size, len, fout);
if(len != N){//说明读到了文件的结尾
break;
}
len= fread(buff, size, N, fin);
}
printf("\n-------file copy end!---------\n");
fclose(fin);
fclose(fout);
return 0;
}
运行结果:

并且生成e:/test/dest.jpg目标图片文件,且目标 图片文件大小与源文件完全相同。