如何使用fopen、fwrite、fread函数

 fopen(const char * path,const char * mode);
    -- path: 文件路径,如:"F:\Visual Stdio 2012\test.txt"
    -- mode: 文件打开方式,例如:
             "r" 以只读方式打开文件,该文件必须存在。
             "w" 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
            "w+" 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
             "a" 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
             "a+" 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。(原来的EOF符不保留)
            "wb" 只写打开或新建一个二进制文件,只允许写数据。
            "wb+" 读写打开或建立一个二进制文件,允许读和写。
             "ab" 追加打开一个二进制文件,并在文件末尾写数据。
             "ab+"读写打开一个二进制文件,允许读,或在文件末追加数据。   
    --返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。        

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
    -- buffer:指向数据块的指针
    -- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4)
    -- count:数据个数
    -- stream:文件指针

size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
   -- buffer:指向数据块的指针
   -- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4)
   -- count:数据个数
   -- stream:文件指针
  1 #include <stdio.h>
  2 typedef struct student ------------------------------- //定义一个结构体并重命名为stu
  3 {
  4     int id;
  5     char name[32];
  6 }stu;
  7 stu stu1;    -----------------------------------------------//定义结构体类型变量stu1
  8 void write_file();
  9 void read_file();
 10 
 11 int main()
 12 { ----------------输入之后注释掉14-22行依旧能输出,因为fread
 13 
 14     printf("stu id:\n");-------------------------------------//给stu1赋值
 15     scanf("%d",&stu1.id);
 16     getchar();
 17 
 18     printf("stu name:\n");
 19     scanf("%s",stu1.name);
 20     getchar();
 21 
 22     write_file();--------------------------------------------//调用write_file函数
 23 
 24 
 25     read_file();----------------------------------------------//调用read_file函数
 26     printf("stu1.id = %d\n",stu1.id);
 27     printf("stu1.name = %s\n",stu1.name);
 28 
 29 
 30 }
 31 
 32 void write_file()----------------------------------------------//定义write_file函数
 33 {
 34     FILE *fp;--------------------------------------------------//定义文件指针     
 35     int ret = -1;
 36 
 37     fp = fopen("stu.txt","w+");-----------------------------------//(“文件路径”,“打开方式”)
 38     if(fp == NULL)
 39     {
 40         printf("open file error!\n");
 41         return;----------------------------------------------------//打开错误,就结束函数
 42     }
 43 
 44     ret = fwrite(&stu1,sizeof(stu),1,fp);---//写入内存块中的数据到硬盘(本地文件),(数据块地址,每个数据大小,数据个数,文件指针)
 45     printf("fwrite_file_ret = %d\n",ret);
 46     if(ret <= 0)
 47     {
 48         printf("write error!\n");
 49         return;
 50     }
 51 
 52     fclose(fp);
 53 
 54     return;
 55 
 56 }
 57 
 58 
 59 void read_file()------------------------------------//定义read_file()函数
 60 {
 61     FILE *fp;--------------------------------------//定义文件指针
 62     int ret = -1;
 63 
 64     fp = fopen("stu.txt","r+");
 65     if(fp == NULL)
 66     {
 67         printf("open file error!\n");
 68         return;
 69     }
 70 
 71 
 72     ret = fread(&stu1,sizeof(stu),1,fp);---//从文件中读取数据,(数据块地址,每个数据大小,数据个数,文件地址即指针)
 73     printf("ret_file_ret = %d\n",ret);
 74 
 75     fclose(fp);---------------------------------//每次打开文件记得关闭
 76 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值