C语言程序计第十章 文件
第十章 文件 10.1 概述 概述 10.2 文件类型指针 文件类型指针 10.3 文件的打开与关闭 文件的打开 文件的打开 文件的打开 文件的关闭 10.4 文件的读写 格式化I/O:fprintf与fscanf 函数原型: 10.5 文件的定位 10.6 出错检测 C 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位 使用数据文件的目的 数据文件的改动不引起程序的改动——程序与数据分离 不同程序可以访问同一数据文件中的数据——数据共享 能长期保存程序运行的中间数据或结果数据 C语言把文件看作一个字节序列,即由一连串的字节组成,称为“流(stream)” ,以字节为单位访问,没有记录的界限 文件分类 按文件的逻辑结构: 记录文件:由具有一定结构的记录组成(定长和不定长) 流式文件:由一个个字符(字节)数据顺序组成 按存储介质: 普通文件:存储介质文件(磁盘、磁带等) 设备文件:非存储介质(键盘、显示器、打印机等) 按数据的组织形式: 文本文件: ASCII文件,每个字节存放一个字符的ASCII码 二进制文件:数据按其在内存中的存储形式原样存放 如 int型数10000内存存储形式 二进制形式ASCII形式 文本文件特点: 存储量大、速度慢、便于对字符操作 二进制文件特点: 存储量小、速度快、便于存放中间结果磁盘文件 输出文件缓冲区 输入文件缓冲区 程序数据区 a 缓冲文件系统: 缓冲区 指令区 程序 用户数据区 磁盘 非缓冲文件系统: 文件处理方法 缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区 非缓冲文件系统:低级文件系统,由用户在程序中为每个文件设定缓冲区 要调用一个文件,需要有以下的信息 文件当前的读写位置 与该文件对应的内存缓冲区的地址 缓冲区中未被处理的字符串 文件操作方式等 缓冲文件系统为每个正使用的文件在内存开辟文件信息区 文件信息用系统定义的名为FILE的结构体描述 FILE定义在stdio.h中 typedef struct { int _fd; /* 文件号 */ int _cleft; /* 缓冲区中剩下的字节数 */ int _mode; /* 文件操作模式 */ char * _nextc; /* 下一个字节的位置 */ char * _buff; /*文件缓冲区位置 */ }FILE; 文件名 文件使用 方式 文件类型指针 C程序 操作系统 磁盘 文件类型指针 指针变量说明: FILE *fp; 用法: 文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件 文件关闭后,它的文件结构体被释放 文件操作用库函数实现,包含在stdio.h 文件使用方式:打开文件-->文件读/写-->关闭文件 系统自动打开和关闭三个标准文件: 标准输入------键盘 stdin 标准输出------显示器 stdout 标准出错输出-----显示器 stderr FILE * fopen(const char *filename,const char *mode); 文件名(可以包含逻辑驱动器、 路径、文件名、扩展名) 打开方式 返回值 功能:按指定方式从磁盘上查找指定的文件或创建一个新文件。 返值:正常打开,为指向文件结构体的指针;打开失败,为NULL 例:FILE *fp; fp = fopen("file1","r"); 如果成功打开,返回一个指向被打开文件的文件信息区的起始地址;如果打开失败,返回一个NULL指针。 文件打开方式 含义 "r"(只读) 为输入打开一个文本文件 "w"(只写) 为输出打开一个文本文件 "a"(追加) 为追加打开一个文本文件 "rb"(只读) 为输入打开一个二进制文件 "wb"(只写) 为输出打开一个二进制文件 "ab"(追加) 为追加打开一个二进制文件 "r+"(读写) 为读/写打开一个文本文件 "w+"(读写) 为读/写创建一个文本文件 "a+"(读写) 为读/写打开一个文本文件 "rb+"(读写) 为读/写打开一个二进制文件 "wb+"(读写) 为读/写创建一个二进制文件 "ab+"(读写) 为读/写打开一个二进制文件 说明: 打开文件的方式,必须与文件的属性兼容。例如,不能以“w”和“a”方式打开具有“只读”属性的文件。但可以以