← 返回首页
C语言系列教程(三十七)
发表时间:2021-03-31 17:27:06
读写字节文件

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目标图片文件,且目标 图片文件大小与源文件完全相同。