数据块I/O:fread与fwrite

函数原型:

size_t fread(void *buffer,size_t size, size_t count,FILE *fp)

size_t fwrite(void *buffer,size_t size, size_t count,FILE *fp)

功能:读/写数据块 返值:成功,返回读/写的块数;出错或文件尾,返回0 说明: typedef unsigned size_t; buffer: 指向要输入/输出数据块的首地址的指针 size: 每个要读/写的数据块的大小(字节数) count: 要读/写的数据块的个数 fp: 要读/写的文件指针 fread与fwrite 一般用于二进制文件的输入/输出



fread和fwrite用于“从输入文件中读取一块数据到内存中”和“将内存中的一块数据写出到文件中”,两个函数的原型分别为;

size_t fread(void * p, size_t size, size_t num, FILE * fpIn);

size_t fwrite(const void * p, size_t size, size_t num, FILE * fpOut);

同样,fpIn必须是以读或读写方式打开的文件指针,fpOut必须是以写、读写或追加方式打开的文件指针。

参数个数明显比前面介绍的字符读写函数和字符串读写函数多,抛开参数不讲,想一下,如果想“从输入文件中读取一块数据到内存中”,需要解决的问题有哪些,列举如下;

哪个文件?文件指针可指定,即为fpIn。

读到什么地方?需要一个指向内存某个单元的指针,即为p。

读取的块数据有多大?这个问题拆分为二:一是该块内存中基本单元占几个内存字节,即为size,二是该块内存有几个基本单元,即为num,所以,如果基本单元在该块内存中连续排列,要读入的块数据的大小为size*num。

float  f[2];
      FILE  *fp;
      fp=fopen(“aa.dat”,“rb”);
      fread(f,4,2,fp);

或者

for(i=0;i<2;i++)
    fread(&f[i],4,1,fp);
例   struct  student
      {    int num;
           char  name[20];
           char sex;
           int age;
           float  score[3];
      }stud[10];
     for(i=0;i<10;i++)
          fread(&stud[i],sizeof(struct  student),1,fp);

例 从键盘输入4个学生数据,把他们转存到磁盘文件中去

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

#define SIZE 2
struct student_type
{
    char name[10];
    int num;
    int age;
    char addr[15];
}stud[SIZE];

main()
{
    void display();
    void save();
    printf("%s\n","liuwei");
    int i;
    for (i = 0; i<SIZE; i++)
        scanf("%s%d%d%s", stud[i].name, &stud[i].num,
        &stud[i].age, stud[i].addr);
    save();
    display();
}

void save()
{
    FILE *fp;
    int  i;
    if ((fp = fopen("d:\\stu_dat.data", "wb")) == NULL)
    {
        printf("cannot open file\n");
        return;
    }
    for (i = 0; i<SIZE; i++)
    if (fwrite(&stud[i], sizeof(struct student_type), 1, fp) != 1)
        printf("file write error\n");
    fclose(fp);
}

void display()
{
    FILE *fp;
    int  i;
    if ((fp = fopen("d:\\stu_dat.data", "rb")) == NULL)
    {
        printf("cannot open file\n");
        return;
    }
    for (i = 0; i<SIZE; i++)
    {
        fread(&stud[i], sizeof(struct student_type), 1, fp);
        printf("%s",stud[i].name);
        printf("%-10s %4d %4d %-15s\n", stud[i].name,
            stud[i].num, stud[i].age, stud[i].addr);
    }

    fclose(fp);
}

----------

时间: 2024-11-08 22:31:09

数据块I/O:fread与fwrite的相关文章

文件块读写-使用fread和fwrite

通常使用fprintf和fscanf进行对文件的格式化读写,但是因为读写的过程中要进行转码,因此 那么可以通过fread和fwrite进行对数据块的读写. 函数定义为 size_t fread(void *buffer,size_t numbyte,size_t count, FILE *fp); size_t fwrite(const void *buffer,size_t numbyte,size_t count, FILE *fp); 参数含义,buffer-数据块首地址,numbyte-

fread和fwrite的使用

1.rread和fwrite函数 数据块I/O fread与fwrite函数原型:size_t fead(void *buffer, size_t size, size_t, count, FILE *pf)size_t frite(void *buffer, size_t size, size_t count, FILE *pf)功能:读写数据块(将内存的内容直接写入磁盘)返回值:成功,返回读/写的块数,出错或文件尾,返回0.参数含义:buffer 指向要输入/输出数据块首地址指针.size

函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结 (转)

函数fgets和fputs.fread和fwrite.fscanf和fprintf用法小结 字符串读写函数fgets和fputs 一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针): 其中的n是一个正整数.表示从文件中读出的字符串不超过 n-1个字符.在读入的最后一个字符后加上串结束标志'\0'.例如:fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入 字符数组str中. [例10.

读写数据块函数--fread( )和fwrite( )函数

读写数据块函数--fread( )和fwrite( )函数    调用方式分别为:    (1) .fread(buffer,size,count,fp): 该函数将fp指向的文件的数据以数据块的形式读入内存buffer    (2).write(buffer,size,count,fp):该函数将内存buffer的内容以数据块的形式写入fp指向的文件.    其中:buffer:是一个指针.对于fread来说 它是读入数据的有效地址.对 fwrite来说,是要写盘的数据地址(起始地址). si

文件操作:fread()和fwrite()

fread和fwrite函数功能 用来读写一个数据块. 一般调用形式 fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 说明 (1)buffer:是一个指针,对fread来说,它是读入数据的存放地址.对fwrite来说,是要输出数据的地址. (2)size:要读写的字节数: (3)count:要进行读写多少个size字节的数据项: (4)fp:文件型指针. 注意:1 完成次写操(fwrite())作后必须关闭流(fclose()

(转载)C++文件读写函数之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind

http://blog.sina.com.cn/s/blog_61437b3b0102v0bt.html http://blog.csdn.net/chenwk891/article/details/8776479 在C\C++中,文件操作都是由库函数来实现的,主要是分为读和写两种操作,以下详细讲解以下所有有关文件操作的用法: (1)fopen()函数:打开文件 包含头文件:#include 格式:FILE * fopen(const char * path,const char * mode)

fread和fwrite和feof读写二进制文件

#include <stdio.h> #include <stdlib.h> void text_to_bin(char *argv[]); void bin_to_text(); typedef struct { int xh; char name[20]; int age; }Student; int main(int a,char *argv[]){ if(a!=4){ printf("参数不够!\n"); } text_to_bin(argv); bin

fgets和fputs,fread和fwrite,fscanf,和fprintf用法小结

一.fgets(str,n,fp); fgets(str,n,fp);就是从fp指向的文件中读取n-1个字符送入字符数组str中. 说明:1.在读出n-1个字符之前,如果遇到了换行符或者EOF,则读出结束. 2.fgets函数也有返回值,其返回值是字符数组的首地址. 二.fputs("abcd",fp); fputs("abcd",fp):把字符串"abcd"写入所指的文件中. 三.C语言还提供了整块数据的读写函数,可以用来读写一组数据,如一个数

fread和fwrite用法小结

fwrite和fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出. #include <stdio.h>size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);       返回值:读或写的记录数,成功时返回的记录数等于nmemb,出错