zoukankan      html  css  js  c++  java
  • 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(" ");
    }
    }

  • 相关阅读:
    苹果一体机发射Wi-Fi
    iphone 屏蔽系统自动更新,消除设置上的小红点
    data parameter is nil 异常处理
    copy与mutableCopy的区别总结
    java axis2 webservice
    mysql 远程 ip访问
    mysql 存储过程小问题
    mysql游标错误
    is not writable or has an invalid setter method错误的解决
    Struts2中关于"There is no Action mapped for namespace / and action name"的总结
  • 原文地址:https://www.cnblogs.com/Raywang80s/p/5266040.html
Copyright © 2011-2022 走看看