C语言之文件操作

文件的定义

磁盘上的文件是文件。
但是在程序设计中,我们一般谈的文件有两种:程序文件(包括源程序文件(.c),目标文件(.obj),可执行程序(.exe))、数据文件(文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件)

文件的类型

  1. 求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。
  2. 数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。
    C语言之文件操作

文件的打开和关闭

文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。
在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的
关系。ANSIC 规定使用fopen函数来打开文件,fclose来关闭文件。
打开方式如下:

文件使用方式 含义 若文件不存在
“r” (只读) 为了输入数据,打开一个已经存在的文本文件 出错
“w”(只写) 为了输出数据,打开一个文本文件 建立一个新文件
“a”(追加) 向文本文件尾添加数据 出错
“rb”(只读) 为了输入数据,打开一个二进制文本文件 出错
“wb”(只写) 为了输出数据,打开一个二进制文本文件 建立一个新文件
“ab”(追加) 向一个二进制文件尾添加数据 出错
“r+”(读写) 为了读和写,打开一个文本文件 出错
“w+”(读写) 为了读和写,建一个新的文件 建立一个新文件
“a+”(读写) 打开一个文件,在文件尾进行读写 建立一个新文件
“rb+(读写)” 为了读和写,打开一个二进制文件 出错
“wb+”(读写) 为了读和写,建一个新的二进制文件 建立一个新文件
“ab+”(读写) 打开一个二进制文件,在文件尾进行读写 建立一个新文件

文件的顺序读写

功能 函数名 适用于
字符输入函数 fgetc 所有输入流
字符输出函数 fputc 所有输入流
文本行输入函数 fgets 所有输入流
文本行输出函数 fputs 所有输入流
格式化输入函数 fscanf 所有输入流
格式化输出函数 fprintf 所有输入流
二进制输入 fread 所有输入流
二进制输出 fwrite 所有输入流

对比一组函数

scanf fscanf sscanf
从控制台输入 从文件输入 从指定字符串输入
从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与 fgets有区别,fgets遇到空格不结束。 利用它可以从字符串中取出整数、浮点数和字符串等等
scanf("%d,%d,%d", &a, &b, &c); fscanf(fp,"%s%d%lf",a,&b,&c) sscanf("123456 ", “%4s”, str);
printf fprintf sprintf
把格式化字符串输出到标准输出 是把格式化字符串输出到指定文件中 把格式化字符串输出到指定字符串

文件操作函数

  1. fseek函数
    功 能: 重定位流上的文件指针
    用 法: int fseek(FILE *stream, long offset, int fromwhere);
    描 述: 函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字 节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
    返回值: 成功,返回0,否则返回其他值。
    2.ftell函数
    功 能: 返回当前文件位置,也就是说返回FILE 指针当前位置。
    用 法: long ftell(FILE *stream);
    描 述: 函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。使用fseek函数后再调用函数ftell()就能非常容易地确定文件的当前位置。
    3.rewind函数
    功 能: 将文件内部的位置 指针重新指向一个流( 数据流/文件)的开头
    用 法: void rewind(FILE *stream);
    4.feof函数
    功 能: 该函数用来判断文件是否结束。
    用 法: int feof(FILE *fp)
    返回值: 0:假值,表示文件未结束。
        1:真值,表示文件结束。