zoukankan      html  css  js  c++  java
  • 文件读写操作速成攻略

    1. fopen
    函数原型为: FILE *fopen(const char *filename, const char *mode)
    功能:使用给定的模式 mode 打开 filename 所指向的文件
    位置:C 标准库<stdio.h>中
    打开正常:返回指向该流的文件指针 打开失败:返回 NULL
    2.fclose
    函数原型:int fclose( FILE *fp );
    功能:关闭一个文件流
    流成功关闭,fclose 返回 0 ,关闭失败,返回EOF(-1)

    例子
    int main(void)
    {
        FILE *fp = NULL;//赋空,好习惯
        fp = fopen(F_PATH, "打开方式");
        if (NULL == fp)//判断是否正常打开
            return -1;
         (文件读写操作) 
        fclose(fp);
        fp = NULL; /* 最好赋空,否则会指向原打开文件地址 */
        return 0;
    }
    

    3.fscanf
    函数原型为 int fscanf(FILE * stream, const char * format, [argument…]);
    从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与fgets有区别,fgets遇到空格不结束。
    如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。

    例子
    FILE *fp;
    while(!feof(fp))
    {
    fscanf(fp,"%s%d%lf",a,&b,&c);
    //这里%s对应的a不需要加上取地址符号&,因为a为数组名称,其本身就表示该数组的首地址
    printf("%s%d%lf",a,b,c)
    }
    

    4. fgetc()
    函数原型:int fgetc(FILE *stream)
    功能:
    文件指针stream指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节
    成功的话返回所读取的一个字节,到达文件末尾或发生读错误,则返回 EOF

    例子
    int main(void) 
    {
        FILE *stream;
        char string[ ] = "This is a test";
        int ch; 
        stream = fopen("DUMMY.FIL", "w+"); //读写方式打开文件流
        fwrite(string, strlen(string), 1, stream);// 将字符串写入文件 
        fseek(stream, 0, SEEK_SET);//回到文件头
        do
        {
            ch = fgetc(stream);//读取一个字符
            putc(ch);//打印字符
        } 
        while (ch != EOF);//如果在文件尾部,则返回EOF
        fclose(stream);
        return 0;
    }
    

    5.fgets
    函数原型:char *fgets(char *str, int n, FILE *stream);
    函数功能:从指定的流中读取数据,每次读取一行。当读取(n-1)个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止
    如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。如果发生错误,返回一个空指针。

    例子
    int main()
    {
       FILE *fp;
       char str[60];
       fp = fopen("file.txt" , "r");
       if(fp == NULL) {
          perror("打开文件时发生错误");
          return(-1);
       }
       if( fgets (str, 60, fp)!=NULL ) {
          puts(str);
       }
       fclose(fp);
       return(0);
    }
    

    每次只能读取n-1个字符,最后一个自动添加为‘’,换行符也会当做字符读入,如果读到的话。
    6.fread
    函数原型为:size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
    从给定流 stream 读取数据,最多读取count个项,每个项size个字节,如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0。

    例子
    int main()
    {
       FILE *fp;
       char c[] = "This is runoob";
       char buffer[20];
       fp = fopen("file.txt", "w+");
       fwrite(c, strlen(c) + 1, 1, fp);
       fseek(fp, 0, SEEK_SET);
       fread(buffer, strlen(c)+1, 1, fp);
       printf("%s
    ", buffer);
       fclose(fp);
       return(0);
    }
    

    7.fprintf
    函数原型为int fprintf( FILE *stream, const char *format, [ argument ]…)
    功能:fprintf()函数根据指定的格式(format),向输出流(stream)写入数据(argument)
    如果成功,则返回写入的字符总数,否则返回一个负数。

    例子
    int main()
    {
       FILE * fp;
       fp = fopen ("file.txt", "w+");
       fprintf(fp, "%s %s %s %d", "We", "are", "in", 2014);
       fclose(fp);
       return(0);
    }
    

    8.fputc
    函数原型:int fputc (int c, FILE *fp)
    功能:将字符ch写到文件指针fp所指向的文件的当前写指针的位置
    函数返回写入文件的字符的ASCII码值,出错时,返回EOF(-1)。当正确写入一个字符或一个字节的数据后,文件内部写指针会自动后移一个字节的位置。

    例子
    #include <stdio.h>
    #include <string.h>
    int main(void)
    {
    char msg[]="Hello world";
    int i=0;
    while(msg[i]&&(i<strlen(msg)))
    {
    	fputc(msg[i],stdout);//标准输出文件,默认是屏幕文件
    	i++;
    }
    return 0;
    }
    

    9.fputs
    函数原型:int fputs(const char *str, FILE *stream)
    把字符串写入到指定的流 stream 中,但不包括空字符。
    该函数返回一个非负值,如果发生错误则返回 EOF。

    例子
    #include <stdio.h>
    int main ()
    {
       FILE *fp;
       fp = fopen("file.txt", "w+");
       fputs("这是 C 语言。", fp);
       fputs("这是一种系统程序设计语言。", fp);
       fclose(fp);
       return(0);
    }
    

    10.fwrite
    函数原型:size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
    功能:功能是向指定的文件中写入若干数据块
    如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。

    #include <stdio.h>
    struct mystruct
    {
        int i;
        char cha;
    };
    int main(void)
    {
        FILE *stream;
        struct mystruct s;
        if ((stream = fopen("TEST.$$$", "wb")) == NULL) /* open file TEST.$$$ */
        {
            fprintf(stderr, "Cannot open output file.
    ");
            return 1;
        }
        s.i = 0;
        s.cha = 'A';
        fwrite(&s, sizeof(s), 1, stream); /* 写的struct文件*/
        fclose(stream); /*关闭文件*/
        return 0;
    }
    

    11.feof
    函数原型:int feof(FILE *stream);
    功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值,文件未结束,返回0值)

    int c;
    c = fgetc(fp);
    while(!feof(fp))
    {
        printf("%X
    ", c);
        c = fgetc(fp);//最后一个c的值为-1,但是无妨,因为其他所有的循环操作都要放在此句话上面
    }
    

    对于文件的读写,有一个最为关键的部分是打开方式,只有确定打开方式,才能保证你的文件操作无误。
    参考链接

  • 相关阅读:
    next_permutation函数(全排列)
    滚动数组
    多重背包问题
    ubuntu12.04硬盘安装
    UBUNTU12.04下安装配置体验gnome3
    给Ubuntu安装KDE桌面 [转]
    Ubuntu 13.04 用户安装 gnome 3.8 桌面
    ubuntu下安装wine
    ubuntu 安装输入法(fcitx)
    js 对url进行编码和解码的三种方式
  • 原文地址:https://www.cnblogs.com/zhichao-yan/p/13368508.html
Copyright © 2011-2022 走看看