第9章 文件

  1. 文件概述。
    1. 引言。
      1. 磁盘上的文件操作前要打开,操作方式主要有读取文件中的数据、将数据写到文件中,简称文件的读写操作,文件处理后要关闭。
      2. 输入/输出设备的作用也是从设备上读取数据(输入)和将数据写到设备上(输出),所以也把输入/输出设备当做文件来处理。
    2. 文件概述。
      1. 引言。
        1. 文件是按某个规则集合在一起,保存在外部存储器上的一批数据组成的。
      2. 文件概述。
        1. 引言。
          1. 如果文件中存放的都是数据,这种文件称为“数据文件”;
          2. 如果文件中存放的是源程序清单或者是编译连接后生成的可执行程序,这样的文件统称为“程序文件”。
        2. 磁盘文件名。
          1. 磁盘文件名的一般组成如下:
            盘符:路径文件主名.扩展名
          2. 如果路径出现在字符串中,其中的“”符号需要写成转义字符“\”。
          3. 文件主名和扩展名都是由字母开头的字母数字等字符组成的,长度分别小于等于8个或3个字符。
          4. 仅省略“盘符”,表示在当前盘指定路径下寻找文件;
          5. 仅省略“路径”,表示在指定盘当前路径下寻找文件;
          6. 如果两者都省略,表示在当前盘当前路径下寻找文件。
        3. 磁盘文件的打开与关闭。
          1. 程序只能处理内存中的数据。
          2. 通常把从磁盘文件中读取数据到内存称为“文件的打开”;把内存中的数据存回到磁盘文件称为“文件的关闭”。
          3. 使用文件前必须打开文件;使用后必须关闭文件。
        4. 缓冲文件系统和非缓冲文件系统。
          1. “文件缓冲区”是磁盘文件和程序文件中存放数据的变量、数组之间交换数据的缓冲区域。
        5. 磁盘文件的分类。
          1. 按文件中数据存放的格式,可以把磁盘文件分为“二进制文件”和“文本文件”。
          2. 二进制文件中数据都是按其二进制方式存放的。例如一个整型数据-1234在二进制文件中只占2个字节。
          3. 文本文件中数据都是将其转换成对应的ASCII代码字符来存放的。例如,一个整型数据-1234在文本文件中要占用5个字节,依次存放表示“-1234”的5个字符:‘-’、‘1’、‘2’、‘3’、‘4’。
        6. 设备文件。
          1. 由于计算机中的输入/输出设备的作用是输入/输出数据,其功能和文件的读取数据/写入数据相似,所以把输入/输出设备也看成文件,称为设备文件。
          2. 键盘是标准输入设备。
          3. 显示器是标准输入设备,也是标准错误输出设备。
    3. 文件型指针。
      1. C语言规定文件型是一种特殊的“结构型”,该结构型中的成员记录了处理文件时所需的信息:文件代号(整型)、文件缓冲区所剩余的字节数(整型)、文件操作模式(整型)、下一个待处理字节的地址(字符型指针)、文件缓冲区首地址(字符型指针)。
      2. 对于这个结构类型,系统已经在名为“stdio.h”的头文件中做了定义。
      3. 用“FILE”定义的指针变量称为“文件型指针”,是专用于文件处理的。
      4. FILE *文件型指针文件名1, *文件型指针名2, ...;
  2. 文件的打开与关闭函数。
    1. 打开文件函数。
      1. 【函数头】FILE *fopen(char *filename, char *mode)
      2. mode所指向的字符串是对打开文件规定的“使用方式”。有针对“文本文件”类型的,也有针对“二进制文件”类型的。
      3. 如果打开文件出现错误,返回值为“NULL”。“NULL”是在“stdio.h”中定义的符号常量,其值为“0”,含义为“空地址”。
    2. 关闭文件函数。
      1. int fclose(FILE *fp)
    3. 标准设备文件的打开与关闭。
      1. 三种标准输入/输出设备的使用不必事先打开对应的设备文件,因为在系统启动后,已自动打开这三个设备文件,并且为它们各自设置了一个文件型指针,名称如下:
        1. 标准输入设备(键盘)    stdin
        2. 标准输出设备(显示器)    stdout
        3. 标准错误输出设备(显示器)    stderr
      2. 三种标准输入/输出设备文件使用后,也不必关闭。因为系统在退出时,将自动关闭。
  3. 文件的读/写函数。
    1. 文件尾测试函数。
      1. 读取文件中数据时,需要判断是否到达文件尾。若到达文件尾,则不能继续读取数据。
      2. 【函数头】int feof(FILE *fp)
    2. 字符读/写函数。
      1. 写字符函数。
        1. 【函数头】int fputc(char ch, FILE *fp)
        2. 对文本文件,写入的是单个字符;对二进制文件,写入的数据是一个字节。
      2. 读字符函数。
        1. 【函数头】int fgetc(FILE *fp)
        2. 对文本文件,读取的是单个字符;对二进制文件,读取的数据是一个字节。
    3. 字符串读/写函数。一般处理文本文件。
      1. 写字符串函数。
        【函数头】int fputs(char *str, FILE *fp)
        【功能】将str指向的一个字符串,舍去结束标记符''后写入fp所指向的文件中。
      2. 读字符串函数。
        【函数头】char *fgets(char *str, int n, FILE *fp)
        【功能】从fp所指向的文件当前位置读取n-1个字符,在其后补充一个字符串结束标记符'',组成字符串并存入str指定的内存区。
      3. 文件中的等长字符串与不等长字符串的处理。
    4. 数据读/写函数。一般处理二进制文件。
      1. 写数据函数。
        【函数头】int fwrite(char *buf, unsigned int size, unsigned int n, FILE *fp)
      2. 读数据函数。
        【函数头】int fread(char *buf, unsigned int size, unsigned int n, FILE *fp)
  4. 文件定位函数。
    1. 文件头定位函数。
      【函数头】int rewind(FILE *fp)
      【功能】将文件内部指针置于fp所指向的文件开头。
    2. 文件随机定位函数。
      【函数头】int fseek(FILE *fp, long offset, int from)
      【功能】将fp所指向的文件内部指针从from指定的起始位置移动offset个字节,指向新的位置。
  5. 文件应用程序设计举例。

发表评论

电子邮件地址不会被公开。 必填项已用*标注