C程序设计第10章
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中读(文件没有读写模式之分)。 • 读写操作可以针对文件中任意成分进行。 • 例如
• 第一次读了第100个成分 • 然后再读第3个成分 • 然后再用一个新的数据修改第50 成分 • 将其写入第50个成分中 • 然后又读第200个成分...,等等。
这是允许的,并且是正确的。
第5页/共50页
普通文件和设备文件
• EOF:值为“-1” 习惯上表示文件结束,或文件操作出错; • NULL:值为“0”
习惯上表示打开文件失败等。
第12页/共50页
文件操作
• C没有文件操作语句,C文件操作全部通过系统定义 的库函数来实现。
• “库函数”是指系统已经定义好的,存放在“函数库” 文件内的,可以被用户直接调用的函数。这些库函数 根据其功能的不同,存放在不同的函数库中。
• 普通文件是指驻留在磁盘或其它外部介质上的 一个有序数据集,可以是源程序文件、目标程 序文件、可执行程序文件;也可以是一组待输 入处理的原始数据,或者是一组输出的结果。
• 设备文件是指与主机相联的各种外部设备,如 显示器、打印机、键盘等。
• 在操作系统中,把外部设备也作为文件来进行 管理,把它们的输入、输出等同于对磁盘文件 的读和写。通常显示器定义为标准输出文件, 键盘是标准输入文件
返回值
=
所写字符的ASCII码 EOF
操作成功 出错
第22页/共50页
读字符串
• 函数原型:
char *fgets( char *str , int num ,
FILE * fpointer );
返• 功回• 能从值:fp=oinsNttreU所rL指L指向的的文字件符中数读组取一首个地字址符串
第26页/共50页
格式化读写
• 读/写多个含格式的数据时选用 fscanf() 和
fprintf() 函数。
• 函数fscanf() 和 fprintf() 与函数 scanf() 和
printf() 的功能相似,
• 区别在于函数 fscanf() 和 fprintf() 操作对象是一
般文件,而 scanf() 和printf() 操作对象是标准输
• 文件名
文件名是文件的唯一标识,它的一般结构是
主文件名.扩展名
其中的扩展名可以省略,但通常都保留。
• 因为通过扩展名,可以判断文件类型。例如.
• .c • .txt • .doc
C语言的源程序文件 文本文件 word文档文件
第2页/共50页
• 文件名分为 • 绝对文件名 从磁盘盘符开始描述的文件名 • 相对文件名 从计算机操作系统中文件系统的某个节点开始描述的文件名
• 文件操作函数库的头文件是 “stdio.h”,在用 户程序中只要涉及文件操作,即只要涉及输入输 出就应该把该文件括入程序中,使用的程序行是:
#include "stdio.h"
• 这就是为什么前述各个章节的程序都含有这一行
的原因。
第14页/共50页
任何高级语言,对文件操作都应该遵循: 打开文件 → 操作文件 → 关闭文件
• C 程序中用指向 FILE 类型变量的指针变量(简称“文件 指针”)来标识具体文件。变量声明 FILE *fp ;
• 声明了一个文件指针变量 fp ,以后 fp 可以用来标识具 体文件。
第10页/共50页
标记
• C文件是一个流式文件,在该字节流上有一个隐含的
暗标记,该标记总是指向文件中正要操作的字节,即
第17页/共50页
下表给出文件打开模式 mode 及其含义。
序号 mode
含义
1 “r” 以只读方式打开一个ASCII文件
2 “w” 以只写方式打开或新建一个ASCII文件,原 有文件内容全部删除
3 “a” 同“w”,但是不删除原有文件内容
4 “r+” 以可读可写方式打开一个ASCII文件
5 “w+” 以可读可写方式打开或新建一个ASCII文件, 原有文件内容全部删除
• 例如: E:\doc\programing\test.c 表示绝对文件名 test.c 表示相对于节 E:\doc\programing的相对文件名
第3页/共50页
顺序文件和随机文件
• 顺序文件的特点:文件分成两种模式 • 读模式 写模式
• 在任意时刻,一个顺序文件只能处于两种模式之一。 当一个顺序文件处于读模式时,只能从该文件读数据。
读取arg_list对应的数据
返回值
第16页/共50页
• fopen 根据 mode 指定的模式,打开由filename
指定的文件。
返回值
=
指向文件filename的文件指针 NULL
操作成功 出错
• 例如: fp = fopen( "c:\user\file.txt" , "r" ) ;
以“只读”方式,打开 c 盘 user 节点下的 file.txt 文件。如果成功则 fp 就是文件 file.txt 的文件指针 变量,并且只允许对文件进行读操作;否则 fp 的值
读数据块
• 函数原型:
int fread( void *buf , int size , int count , FILE *fp );
返• 功回能值:=
实际读取的字段个数 EOF
操作成功 错误或文件结束
• 从fp所指的文件中读取count个字段,
• 每个字段为size个字节,把它们送到buf所指的缓冲数组 中,
6 “a+” 同“w+”,但是不删除原有文件内容
第18页/共50页
7 “rb” 以只读方式打开一个二进制文件 8 “wb” 以只写方式打开或新建一个二进制文件,
原有文件内容全部删除 9 “ab” 同“wb”,但是不删除原有文件内容 10 “rb+” 以可读可写方式打开一个二进制文件 11 “wb+” 以可读可写方式打开或新建一个二进制文
操作成功 ,并将此否串则保存
在str指向的字符数组中。
• 字符串的自然结束符是 “换行符” 和 “文件结束符”。
• 若读到 num-1 个字符后还没遇到结束符,则也强制结束, 这时把 num-1 个读入的字符送入数组 str 中。
• 读入结束后,在数组 str的字符串末尾加字符串终止字符
第23页/共50页
入输出文件。
• 格式化读写是把数据按 fscanf()和 fprintf() 函数
中格式控制字符串中控制字符的要求进行转换,然后
再进行读/写。
第27页/共50页
格式化输入
• 函数原型:
int fscanf( FILE * fp , char * format , arg_list );
• 功能:
从fp所指文件,按format规定的格式进行转换,
返回值
=
• 功能:
实际写入的字段个数 其它
操作成功 操作错误
• 从buf所指的数组中,把countБайду номын сангаас字段写到fp所指的文件 中,每个字段为size个字节,
• 同时,将读写位置指针向前移动size*count个字节。
• 一般来讲,数组buf每个元素的尺寸为size ,每个字段正 好对应数组buf的一个元素;即把数组buf的count个元 素写到文件中。
• 对字节流的操作;输入输出的开始和结束都由程序控制, 不受物理符号(如回车符)的影响。把这种文件操作方式称 作“流式文件”。
第9页/共50页
文件指针
• C 系统为了处理文件,为每个文件在内存中开辟一个区 域,用来存放文件的有关信息,如文件名、文件状态以及 文件当前位置等。
• 这个区域被作成一个称为 FILE 类型的结构体。FILE 的 类型由系统定义,保存在头文件 stdio.h 中,它的具体 结构我们暂时不用关心。
• 用TYPE命令显示二进制文件是无意义的,其内 容无法读懂。
第8页/共50页
流式文件
• C系统的文件操作,不区分文件类别。不论 顺序文件还是随机文件、 普通文件还是设备文件、 ASCII文件还是二进制文件。
• C把文件一律都看成是“字节流”,以字节(每个字节可 能是一个字符,也可能是一个二进制代码)为单位进行 操作处理。
• 功能
从fp指向的文件中读取一个字符,同时将读写位
置指针向前移动1个字节
返回值
=
读取字符的ASCII码 EOF
操作成功 出错或遇到文件结束
第21页/共50页
写字符
• 函数原型 int fputc( int ch, FILE * fp );
• 功能 把字符ch写入fp指向的文件,同时将读写位置指 针向前移动1个字节。
件,原有文件内容全部删除 12 “ab+” 同“wb+”,但是不删除原有文件内容
第19页/共50页
关闭文件
• 函数原型
int fclose( FILE * stream );
• 调用方式
fclose( fp );
返回值
=
0 EOF
操作成功 出错
第20页/共50页
读字符
• 函数原型:
int fgetc( FILE * fp );
• 反之,当一个顺序文件处于写模式时,只能向该文件 写数据。
• 从操作角度看,顺序文件只能顺序操作。 • 对于读来讲,顺序文件只能从文件第一成分开始顺序
的,一个成分接一个成分的读数据。 • 对于写来讲,顺序文件只能在文件尾一个成分接一个
第4页/共50页
• 随机文件的特点是:对文件的操作是随机 • 在同一时刻,即可以向文件中写,也可以从文件
这样的过程。 下面就遵循这个规则对文件的操作进行说明
第15页/共50页
打开文件
• 函数原型
FILE* fopen ( const char* filename, const char* mode );
• 调用方式
fp = fopen( filename , mode );
• filename 是一个字符串,具体给出要打开的文件的文件名; • mode 也是一个字符串,具体给出文件的打开模式, 表12-1列出各种打开模式; • fp 是文件指针变量,以后程序中使用该指针变量标识由文件名给出的文件。
• 同时,将读写位置指针向前移动size* count个字节。
• 一般来讲,数组buf每个元素的尺寸为size ,每个字段正 好对应数组buf的一个元素;即读入count个字段送入数组 buf的count个元素中。
第25页/共50页
写数据块
• 函数原型:
int fwrite( void *buf, int size, int count, FILE *fp );
1
2
3
4
• 共占用4个字节。ASCII文件可以在屏幕上按字符显示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可 以 显 示 文 件 的 内 容 。 由第于7页是/共按50页字 符 显 示 , 因 此 能 读 懂 文
• 二进制文件就是二进制码文件,它把数据按二 进制编码方式存放到文件中。例如,数1234的 存储形式为: 0000010011010010 只占二个字节。
写字符串
• 函数原型
int *fputs( char *str , FILE * fpointer );
• 功能:
把str所指字符串(不包括字符串结束符NULL)写入 fpointer指向的文件, 同时将读写位置指针向前移动 num(字符串长度)个字节。
返回值
=
非负值
EOF第24页/共50页
操作成功 否则
第6页/共50页
ASCII文件和二进制文件
• ASCII文件就是ASCII码文件,也称为文本文件、TEXT 文件。 这种文件每个字符对应一个字节,用于存放相应 字符的ASCII码,也就是存放字符的存储形态的编码。
• 字符1、2、3、4的ASCII码分别为49、50、51、52
(十六进001制10的003110、0131020、1030301、103041)10,011字01符00串“1234”的 存储形式为:
下一个字节,称该标记为文件读写位置指针。
• 例如:
□□□ … □ …
指向文件首,即指向第一个字
节
↑ □□□□ … □ …
指向第四个字节;
↑ □□□ … □□ .
指向文件尾;
↑
第11页/共50页
• 几个常量
C系统引进几个常量标志文件处理状态。最常用的是 EOF 和 NULL,它们是 stdio.h 中预定义的常量。
• 库函数本身并不属于语言,它是系统根据需要提供 给用户使用的函数。C 标准定义了常用的函数库和每 个函数库中常用的库函数。但是不同的编译系统提供 的函数库不同,不同编译系统在每个函数库中提供的
第13页/共50页
• 对应每个函数库,有一个头文件,在头文件中包 含相应函数库中所有函数的函数原型。用户使用 库函数时,需要把相应的头文件用 #include 命令括入到自己的程序文件中。
• 第一次读了第100个成分 • 然后再读第3个成分 • 然后再用一个新的数据修改第50 成分 • 将其写入第50个成分中 • 然后又读第200个成分...,等等。
这是允许的,并且是正确的。
第5页/共50页
普通文件和设备文件
• EOF:值为“-1” 习惯上表示文件结束,或文件操作出错; • NULL:值为“0”
习惯上表示打开文件失败等。
第12页/共50页
文件操作
• C没有文件操作语句,C文件操作全部通过系统定义 的库函数来实现。
• “库函数”是指系统已经定义好的,存放在“函数库” 文件内的,可以被用户直接调用的函数。这些库函数 根据其功能的不同,存放在不同的函数库中。
• 普通文件是指驻留在磁盘或其它外部介质上的 一个有序数据集,可以是源程序文件、目标程 序文件、可执行程序文件;也可以是一组待输 入处理的原始数据,或者是一组输出的结果。
• 设备文件是指与主机相联的各种外部设备,如 显示器、打印机、键盘等。
• 在操作系统中,把外部设备也作为文件来进行 管理,把它们的输入、输出等同于对磁盘文件 的读和写。通常显示器定义为标准输出文件, 键盘是标准输入文件
返回值
=
所写字符的ASCII码 EOF
操作成功 出错
第22页/共50页
读字符串
• 函数原型:
char *fgets( char *str , int num ,
FILE * fpointer );
返• 功回• 能从值:fp=oinsNttreU所rL指L指向的的文字件符中数读组取一首个地字址符串
第26页/共50页
格式化读写
• 读/写多个含格式的数据时选用 fscanf() 和
fprintf() 函数。
• 函数fscanf() 和 fprintf() 与函数 scanf() 和
printf() 的功能相似,
• 区别在于函数 fscanf() 和 fprintf() 操作对象是一
般文件,而 scanf() 和printf() 操作对象是标准输
• 文件名
文件名是文件的唯一标识,它的一般结构是
主文件名.扩展名
其中的扩展名可以省略,但通常都保留。
• 因为通过扩展名,可以判断文件类型。例如.
• .c • .txt • .doc
C语言的源程序文件 文本文件 word文档文件
第2页/共50页
• 文件名分为 • 绝对文件名 从磁盘盘符开始描述的文件名 • 相对文件名 从计算机操作系统中文件系统的某个节点开始描述的文件名
• 文件操作函数库的头文件是 “stdio.h”,在用 户程序中只要涉及文件操作,即只要涉及输入输 出就应该把该文件括入程序中,使用的程序行是:
#include "stdio.h"
• 这就是为什么前述各个章节的程序都含有这一行
的原因。
第14页/共50页
任何高级语言,对文件操作都应该遵循: 打开文件 → 操作文件 → 关闭文件
• C 程序中用指向 FILE 类型变量的指针变量(简称“文件 指针”)来标识具体文件。变量声明 FILE *fp ;
• 声明了一个文件指针变量 fp ,以后 fp 可以用来标识具 体文件。
第10页/共50页
标记
• C文件是一个流式文件,在该字节流上有一个隐含的
暗标记,该标记总是指向文件中正要操作的字节,即
第17页/共50页
下表给出文件打开模式 mode 及其含义。
序号 mode
含义
1 “r” 以只读方式打开一个ASCII文件
2 “w” 以只写方式打开或新建一个ASCII文件,原 有文件内容全部删除
3 “a” 同“w”,但是不删除原有文件内容
4 “r+” 以可读可写方式打开一个ASCII文件
5 “w+” 以可读可写方式打开或新建一个ASCII文件, 原有文件内容全部删除
• 例如: E:\doc\programing\test.c 表示绝对文件名 test.c 表示相对于节 E:\doc\programing的相对文件名
第3页/共50页
顺序文件和随机文件
• 顺序文件的特点:文件分成两种模式 • 读模式 写模式
• 在任意时刻,一个顺序文件只能处于两种模式之一。 当一个顺序文件处于读模式时,只能从该文件读数据。
读取arg_list对应的数据
返回值
第16页/共50页
• fopen 根据 mode 指定的模式,打开由filename
指定的文件。
返回值
=
指向文件filename的文件指针 NULL
操作成功 出错
• 例如: fp = fopen( "c:\user\file.txt" , "r" ) ;
以“只读”方式,打开 c 盘 user 节点下的 file.txt 文件。如果成功则 fp 就是文件 file.txt 的文件指针 变量,并且只允许对文件进行读操作;否则 fp 的值
读数据块
• 函数原型:
int fread( void *buf , int size , int count , FILE *fp );
返• 功回能值:=
实际读取的字段个数 EOF
操作成功 错误或文件结束
• 从fp所指的文件中读取count个字段,
• 每个字段为size个字节,把它们送到buf所指的缓冲数组 中,
6 “a+” 同“w+”,但是不删除原有文件内容
第18页/共50页
7 “rb” 以只读方式打开一个二进制文件 8 “wb” 以只写方式打开或新建一个二进制文件,
原有文件内容全部删除 9 “ab” 同“wb”,但是不删除原有文件内容 10 “rb+” 以可读可写方式打开一个二进制文件 11 “wb+” 以可读可写方式打开或新建一个二进制文
操作成功 ,并将此否串则保存
在str指向的字符数组中。
• 字符串的自然结束符是 “换行符” 和 “文件结束符”。
• 若读到 num-1 个字符后还没遇到结束符,则也强制结束, 这时把 num-1 个读入的字符送入数组 str 中。
• 读入结束后,在数组 str的字符串末尾加字符串终止字符
第23页/共50页
入输出文件。
• 格式化读写是把数据按 fscanf()和 fprintf() 函数
中格式控制字符串中控制字符的要求进行转换,然后
再进行读/写。
第27页/共50页
格式化输入
• 函数原型:
int fscanf( FILE * fp , char * format , arg_list );
• 功能:
从fp所指文件,按format规定的格式进行转换,
返回值
=
• 功能:
实际写入的字段个数 其它
操作成功 操作错误
• 从buf所指的数组中,把countБайду номын сангаас字段写到fp所指的文件 中,每个字段为size个字节,
• 同时,将读写位置指针向前移动size*count个字节。
• 一般来讲,数组buf每个元素的尺寸为size ,每个字段正 好对应数组buf的一个元素;即把数组buf的count个元 素写到文件中。
• 对字节流的操作;输入输出的开始和结束都由程序控制, 不受物理符号(如回车符)的影响。把这种文件操作方式称 作“流式文件”。
第9页/共50页
文件指针
• C 系统为了处理文件,为每个文件在内存中开辟一个区 域,用来存放文件的有关信息,如文件名、文件状态以及 文件当前位置等。
• 这个区域被作成一个称为 FILE 类型的结构体。FILE 的 类型由系统定义,保存在头文件 stdio.h 中,它的具体 结构我们暂时不用关心。
• 用TYPE命令显示二进制文件是无意义的,其内 容无法读懂。
第8页/共50页
流式文件
• C系统的文件操作,不区分文件类别。不论 顺序文件还是随机文件、 普通文件还是设备文件、 ASCII文件还是二进制文件。
• C把文件一律都看成是“字节流”,以字节(每个字节可 能是一个字符,也可能是一个二进制代码)为单位进行 操作处理。
• 功能
从fp指向的文件中读取一个字符,同时将读写位
置指针向前移动1个字节
返回值
=
读取字符的ASCII码 EOF
操作成功 出错或遇到文件结束
第21页/共50页
写字符
• 函数原型 int fputc( int ch, FILE * fp );
• 功能 把字符ch写入fp指向的文件,同时将读写位置指 针向前移动1个字节。
件,原有文件内容全部删除 12 “ab+” 同“wb+”,但是不删除原有文件内容
第19页/共50页
关闭文件
• 函数原型
int fclose( FILE * stream );
• 调用方式
fclose( fp );
返回值
=
0 EOF
操作成功 出错
第20页/共50页
读字符
• 函数原型:
int fgetc( FILE * fp );
• 反之,当一个顺序文件处于写模式时,只能向该文件 写数据。
• 从操作角度看,顺序文件只能顺序操作。 • 对于读来讲,顺序文件只能从文件第一成分开始顺序
的,一个成分接一个成分的读数据。 • 对于写来讲,顺序文件只能在文件尾一个成分接一个
第4页/共50页
• 随机文件的特点是:对文件的操作是随机 • 在同一时刻,即可以向文件中写,也可以从文件
这样的过程。 下面就遵循这个规则对文件的操作进行说明
第15页/共50页
打开文件
• 函数原型
FILE* fopen ( const char* filename, const char* mode );
• 调用方式
fp = fopen( filename , mode );
• filename 是一个字符串,具体给出要打开的文件的文件名; • mode 也是一个字符串,具体给出文件的打开模式, 表12-1列出各种打开模式; • fp 是文件指针变量,以后程序中使用该指针变量标识由文件名给出的文件。
• 同时,将读写位置指针向前移动size* count个字节。
• 一般来讲,数组buf每个元素的尺寸为size ,每个字段正 好对应数组buf的一个元素;即读入count个字段送入数组 buf的count个元素中。
第25页/共50页
写数据块
• 函数原型:
int fwrite( void *buf, int size, int count, FILE *fp );
1
2
3
4
• 共占用4个字节。ASCII文件可以在屏幕上按字符显示, 例如源程序文件就是ASCII文件,用DOS命令TYPE可 以 显 示 文 件 的 内 容 。 由第于7页是/共按50页字 符 显 示 , 因 此 能 读 懂 文
• 二进制文件就是二进制码文件,它把数据按二 进制编码方式存放到文件中。例如,数1234的 存储形式为: 0000010011010010 只占二个字节。
写字符串
• 函数原型
int *fputs( char *str , FILE * fpointer );
• 功能:
把str所指字符串(不包括字符串结束符NULL)写入 fpointer指向的文件, 同时将读写位置指针向前移动 num(字符串长度)个字节。
返回值
=
非负值
EOF第24页/共50页
操作成功 否则
第6页/共50页
ASCII文件和二进制文件
• ASCII文件就是ASCII码文件,也称为文本文件、TEXT 文件。 这种文件每个字符对应一个字节,用于存放相应 字符的ASCII码,也就是存放字符的存储形态的编码。
• 字符1、2、3、4的ASCII码分别为49、50、51、52
(十六进001制10的003110、0131020、1030301、103041)10,011字01符00串“1234”的 存储形式为:
下一个字节,称该标记为文件读写位置指针。
• 例如:
□□□ … □ …
指向文件首,即指向第一个字
节
↑ □□□□ … □ …
指向第四个字节;
↑ □□□ … □□ .
指向文件尾;
↑
第11页/共50页
• 几个常量
C系统引进几个常量标志文件处理状态。最常用的是 EOF 和 NULL,它们是 stdio.h 中预定义的常量。
• 库函数本身并不属于语言,它是系统根据需要提供 给用户使用的函数。C 标准定义了常用的函数库和每 个函数库中常用的库函数。但是不同的编译系统提供 的函数库不同,不同编译系统在每个函数库中提供的
第13页/共50页
• 对应每个函数库,有一个头文件,在头文件中包 含相应函数库中所有函数的函数原型。用户使用 库函数时,需要把相应的头文件用 #include 命令括入到自己的程序文件中。