• fopen函数和fread函数、fwrite函数


    fopen(打开文件)
    相关函数
     open,fclose
    表头文件
     #include<stdio.h>
    定义函数
     FILE * fopen(const char * path,const char * mode);
    函数说明
     参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
    mode有下列几种形态字符串:
    r 打开只读文件,该文件必须存在。
    r+ 打开可读写的文件,该文件必须存在。
    w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
    w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
    a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
    a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
    上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。
    返回值
     文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。
    附加说明
     一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。
    范例
     #include<stdio.h>
    main()
    {
    FILE * fp;
    fp=fopen(“noexist”,”a+”);
    if(fp= =NULL) return;
    fclose(fp);
    }
     

    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());

               2 完成一次读操作(fread())后,如果没有关闭流(fclose()),则指针(FILE * fp)自动向后移动前一次读写的长度,不关闭流继续下一次读操作则接着上次的输出继续输出;

               3 fprintf() : 按格式输入到流,其原型是int fprintf(FILE *stream, const char *format[, argument, ...]);其用法和printf()相同,不过不是写到控制台,而是写到流罢了。注意的是返回值为此次操作写入到文件的字节数。如int c = fprintf(fp, "%s %s %d %f", str1,str2, a, b) ;str1:10字节;str2: 10字节;a:2字节;b:8字节,c为33,因为写入时不同的数据间自动加入一个空格。

    文件使用之后一定要关闭,否则将不能正确显示内容.fwrite:读入两个学生信息然后用fwrite存入文件

    fread:用fread从文件中读出学生信息。

    fwrite.c

    #include <stdio.h>
    #define SIZE 2
    struct student_type
    {
    char name[10];
    int num;
    int age;
    char addr[10];
    }stud[SIZE];
    void save()
    {
    FILE *fp;
    int i;
    if((fp=fopen("stu_list","wb"))==NULL)
    {
      printf("cant open the file");
      exit(0);
    }
    for(i=0;i<SIZE;i++)
    {
       if(fwrite(&stud[i],sizeof(struct student_type),1,fp)!=1)
        printf("file write error ");
    }
    fclose(fp);
    }
    main()
    {
    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();
    }
    for(i=0;i<SIZE;i++)
    {
       printf("%s,%d,%d",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
    }
    }

    fread.c

    #include <stdio.h>
    #define SIZE 2
    struct student_type
    {
    char name[10];
    int num;
    int age;
    char addr[10];
    }stud[SIZE];
    void read()
    {
    FILE *fp;
    int i;
    if((fp=fopen("stu_list","rb"))==NULL)
    {
      printf("cant open the file");
      exit(0);
    }
    for(i=0;i<SIZE;i++)
    {
       if(fread(&stud[i],sizeof(struct student_type),1,fp)!=1)
        printf("file write error ");
    }
    fclose(fp);
    }
    main()
    {

    int i;
    read();
    for(i=0;i<SIZE;i++)
    {
       printf("%s,%d,%d,%s",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);
       printf(" ");
    }
    }

  • 相关阅读:
    install kde in ubuntu
    Upgrade to or Install Cinnamon 2.4 in Ubuntu
    enjoy dollar vs cash dollar
    opencv linux
    高频交易都有哪些著名的算法
    wpf
    opencv mat flags含义
    gphoto2 canon eos450d
    gphoto2
    task optimization之superglue分析
  • 原文地址:https://www.cnblogs.com/Raywang80s/p/5266040.html
Copyright © 2020-2023  润新知