C的文件流

原文《C语言程序设计(第四版)谭浩强》学习笔记

fopen函数

函数功能:打开一个文件

函数原型:FILE fopen(const char path,const char * mode);

参数含义:path,字符串,文件路径或文件名,mode,字符串表示操作

mode参数 意义
rt 只读打开一个文本文件,只允许读数据
wt 只写打开或建立一个文本文件,只允许写数据
at 追加打开一个文本文件,并在文件末尾写数据
rb 只读打开一个二进制文件,只允许读数据
wb 只写打开或建立一个二进制文件,只允许写数据
ab 追加打开一个二进制文件,并在文件末尾写数据
rt+ 读写打开一个文本文件,允许读和写
wt+ 读写打开或建立一个文本文件,允许读写
at+ 读写打开一个文本文件,允许读,或在文件末追加数据
rb+ 读写打开一个二进制文件,允许读和写
wb+ 读写打开或建立一个二进制文件,允许读和写
ab+ 读写打开一个二进制文件,允许读,或在文件末追加数据

对于文件使用方式有以下几点说明:

  1. 文件使用方式

    1
    r,w,a,t,b,+

    六个字符拼成,各字符的含义是:

    • r(read): 读
    • w(write): 写
    • a(append): 追加
    • t(text): 文本文件,可省略不写 b(banary): 二进制文件
    • +: 读和写
  2. 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。

  3. 用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。

  4. 若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错。

  5. 在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。

  6. 把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入 磁盘时,也要把二进制码转换成 ASCII码,因此文本文件的读写要花费较多的转换时间。 对二进制文件的读写不存在这种转换。

  7. 标准输入文件(键盘),标准输出文件(显示器),标准出错输出(出错信息)是由系统打开 的,可直接使用。

13.4 文件的读写

13.4.1 字符读写函数fgetc和fputc

2.写字符函数fputc
  fputc 函数的功能是把一个字符写入指定的文件中,函数调用的形式为:

1
fputc(字符量,文件指针);

复制

  fputc函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF。可用此来判断写入是否成功。

13.4.2 字符串读写函数fgets和fputs

1.读字符串函数fgets
  函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:

1
fgets(字符数组名,n,文件指针);

复制

  其中的 n 是一个正整数。表示从文件中读出的字符串不超过 n-1 个字符。在读入的最 后一个字符后加上串结束标志’\0‘。

对 fgets 函数有两点说明:

  1. 在读出n-1个字符之前,如遇到了换行符或EOF,则读出结束。
  2. fgets函数也有返回值,其返回值是字符数组的首地址。

文件的随机读写

文件定位

1
rewind(文件指针);

复制

  它的功能是把文件内部的位置指针移到文件首。

  fseek 函数用来移动文件内部位置指针,其调用形式为:

1
fseek(文件指针,位移量,起始点);

复制

  其中:
  “文件指针”指向被移动的文件。
  “位移量”表示移动的字节数,要求位移量是 long 型数据,以便在文件长度大于 64KB 时不会出错。当用常量表示位移量时,要求加后缀“L”。
  “起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。
  其表示方法如下表。

起始点 表示符号 数字表示
文件首 SEEK_SET 0
当前位置 SEEK_CUR 1

  还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。

文件检测函数

  C语言中常用的文件检测函数有以下几个。

文件结束检测函数feof函数

  调用格式:

1
feof(文件指针);

复制

  功能:判断文件是否处于文件结束位置,如文件结束,则返回值为 1,否则为 0。

读写文件出错检测函数

  ferror 函数调用格式:

1
ferror(文件指针);

复制

  功能:检查文件在用各种输入输出函数进行读写时是否出错。如 ferror 返回值为 0 表示未出错,否则表示有错。

文件出错标志和文件结束标志置 0 函数

  clearerr 函数调用格式:

1
clearerr(文件指针);

复制

  功能:本函数用于清除出错标志和文件结束标志,使它们为 0 值。