任课教师:颜晖 课程名称:计算机程序设计( 课程代码: 0705004 教师E~mai:yqfjct02@dlc.zju.edu.cn 第42讲 浙江大学远程教育学院版权所有 2002-2003第二学期
颜晖 计算机程序设计(C) 42 0705004 yqfjc02@dlc.zju.edu.cn
第十章文件 ■文件概念 文件:是保存在外存储器上的一组数据的有 序集合。 文件的特点是: (1)数据长久保存 (2)数据长度不定 (3)数据按顺序存取 C语言中的文件完全是字节代码的序列(字 节流) 可以看作为磁带
第十章 文 件 文件概念 ▄ 文件:是保存在外存储器上的一组数据的有 序集合。 ▄文件的特点是: (1)数据长久保存 (2)数据长度不定 (3)数据按顺序存取 ▄C语言中的文件完全是字节代码的序列(字 节流) 可以看作为磁带 字节 字节 字节 字节 字节 字节 . . . . . . . . ……
第十章文件 ■文件有两种数据形式: aSci码(文本文件 text stream)ac程序文件 文本文件是字符流 二进制码(二进制文件 binary stream)aexe执行文件 二进制文件是直接把内存数据以二进制形式保存。 ■对于一个整型数1234: 以文本文件保存,它是四个字符: asci码分别是:49505152 以二进制文件保存,它是1234的二进制数0x04D2
第十章 文 件 文件有两种数据形式: ▄ ascii码 (文本文件 text stream) a.c 程序文件 文本文件是字符流 ▄ 二进制码(二进制文件 binary stream) a.exe 执行文件 二进制文件是直接把内存数据以二进制形式保存。 对于一个整型数1234: ▄ 以文本文件保存,它是四个字符: ascii码分别是:49 50 51 52 ; ▄ 以二进制文件保存,它是1234的二进制数0x04D2
文件 ■缓冲文件系统: 向磁盘输出数据:数据—缓冲区 装满缓冲区后 磁盘文件 从磁盘读入数据:先一次性从磁盘文件将 批数据输入到缓冲区,然后再从缓冲区逐个 读入数据到变量 由于磁盘速度相对很操作 数据 直接把数据写自 程序擀罐 很低动完成 文件 2字节 内存单元用什么标识单元 文件名
由于磁盘速度相对很 低,直接把数据写到 磁盘会效率很低 文 件 缓冲文件系统: ▄向磁盘输出数据:数据 缓冲区, 装满缓冲区后 磁盘文件。 ▄从磁盘读入数据:先一次性从磁盘文件将一 批数据输入到缓冲区,然后再从缓冲区逐个 读入数据到变量。 内存单元 内存单元 数据 …… 缓冲器 512字节 …… 文件 由操作 系统自 程序控制 动完成 用什么标识 文件名
文件 ■文件类型指针 使用一个文件指针,来指示文件缓冲区中具 体读写的位置。 文件指针变量 文件指针定义:FE*f 文件类型 由操作 数据 缓冲器]系统自 程序控制 动完成 文件 512字节 文件名
文 件 文件类型指针 ▄使用一个文件指针,来指示文件缓冲区中具 体读写的位置。 文件指针变量 ▄文件指针定义: FILE *fp ; 文件类型 数据 …… 缓冲器 512字节 …… 文件 由操作 系统自 程序控制 动完成 文件名 fp
文件 ■文件类型指针 文件指针定义:FLE*fp 文件类型 文件指针变量 C语言中允许同时使用多个文件,每个文件 都有各自的缓冲区,用不同的文件指针分别指 小。 问题:如何使印与具体文件挂钩?
文 件 文件类型指针 ▄文件指针定义: FILE *fp ; 文件类型 文件指针变量 ▄C语言中允许同时使用多个文件,每个文件 都有各自的缓冲区,用不同的文件指针分别指 示。 问题:如何使fp与具体文件挂钩?
文件的打开 ■文件打开 以后程序只对文件指针 使文件指针与朴进行操作,即用代表磁盘 格式: 文件。 fp= fopen(“文件名”,“文件使用方 式”) 如:印=f文件使用方式(ASC码文件): 作用: “r”仅从已建立的文件读取数据 1在磁盘 “w仅把数据写到一个新建文件 2在内存叶中 fp指示文件 “a仅把数据写到已建立的文件 3把首块5子纵掂;做品绂茶
文件的打开 文件打开 使文件指针与相应文件实体对应起来 ▄ 格式: fp=fopen(“文件名”,“文件使用方 式”) 如:fp = fopen("a.dat", "r") ▄ 作用: 1 在磁盘中找到文件a.dat 2 在内存中开辟512个字节的缓冲区,并由 fp指示文件缓冲区起始位置 3 把首块512字节数据:磁盘 缓冲器 以后程序只对文件指针 进行操作,即用fp代表磁盘 文件。 文件使用方式(ASCII码文件): “ r” 仅从已建立的文件读取数据 “ w” 仅把数据写到一个新建文件 中 “ a” 仅把数据写到已建立的文件 的
文件基本读写 ■我们可以这样看 文件看作一个数组(缓冲器), 文件指针看作是指向数组元素的指针, 文件操作:对文件指针所指的缓冲器单元进 行存取 限制:文件的读写一般是顺序进行的,位 置完全由文件指针控制,并且文件指针的改 变也由系统控制
文件基本读写 我们可以这样看: ▄ 文件 看作 一个数组(缓冲器), ▄ 文件指针 看作 是指向数组元素的指针, ▄文件操作:对文件指针所指的缓冲器单元进 行存取. ▄ 限制:文件的读写一般是顺序进行的,位 置完全由文件指针控制,并且文件指针的改 变也由系统控制
文件基本读写 ■C语言文件读写函数 磁盘文件操作 键盘操作 ch=fgetc( fp) ch=getchar( fputc(ch, fp) putchar( ci ch) fscanf(fp,“格式”,输入表) scanf() fprintf(fp,“格式”,输出表)pint) 它们的说明在 stdio h中
文件基本读写 C语言文件读写函数 磁盘文件操作 键盘操作 ch=fgetc( fp ) ch=getchar( ) fputc(ch , fp) putchar( ch) fscanf( fp , “格式”, 输入表) scanf( ) fprintf( fp , “格式”, 输出表) printf( ) 它们的说明在stdio.h中
文件基本读写 例:将一个已存在的文件a.dat的内容拷贝到bdat文件中 FILE *fpa, *fpb →(1)定义文件指针 char c: int i fpa=fopen("adat", r): fpb=fopen("b dat","w (2)打开文件并建立相应指针 c=ge(pa)fput(cpb),(3)文件读写 b c=fgetc(fpa); fputc(c, fpb) 每一次读/写,文 件指针自动++ 3 fscanf(tpa, d",&i printi(pb,od,1)? 5 fscanf(fpa, %d ",&i) fprintf(fpb, %d", 1) fclose(fpa) fclose(fpb),-(4)关闭打开的所有文件
文件基本读写 例:将一个已存在的文件a.dat的内容拷贝到b.dat文件中。 FILE *fpa, *fpb; (1) 定义文件指针 char c; int i;: fpa=fopen("a.dat","r"); fpb=fopen("b.dat","w"); (2) 打开文件并建立相应指针 c=fgetc(fpa); fputc(c,fpb); (3) 文件读写 c=fgetc(fpa); fputc(c,fpb); fscanf(fpa, "%d ", &i); fprintf(fpb, "%d", i); fscanf(fpa, "%d ", &i); fprintf(fpb, "%d", i); fclose(fpa); fclose(fpb); (4) 关闭打开的所有文件 每一次读/写,文 件指针自动++ ‘a’ ‘b’ 3 5