大学生c语言程序报告ppt,某大学C语言全套课件.ppt

某大学C语言全套课件

C语言程序设计 第八章 数据文件处理技术 8.1 文件概述 文件概述 计算机操作系统将存储在外部存贮介质中的数据以数据流的形式来组织。每个独立的数据流称作文件。 每个文件有一个名字。为便于管理文件,操作系统维持一个呈层次状的目录结构,每个文件都被登录在某一目录下,文件用文件名(包括文件的目录路径)来标识。 也将从键盘输入的数据流和向显示屏或行印机输出的数据流称作文件。 在C语言中,文件中的数据流的组织形式有两种: 数据流由一个个字符组成,称为正文文件。 数据流由二进制字节代码组成,称为二进制文件。 正文文件 文件中数据是字符,每个字符以ASCII 代码存储,占一个字节。 存储数值数据要占较多的存储空间,输入输出时因内存和外存的存储形式不一致,还要进行内外表示形式之间的转换。 正文文件数据流是字符,能让程序对文件作逐个字符处理和文件中的数据能供人阅读。 二进制文件 文件中的数据按其在内存中的存储形式存储在文件中。 存储数值数据只占其内部表示所需的字节数;用二进制形式存储数值数据可以节省外存空间,并免去数据内外表示形式之间的转换。 用于程序与程序或程序与设备之间传递成批数据信息。 程序与文件交换数据的实现过程 设备的读写操作是在操作系统的管理和控制下进行。 操作系统为能高效地管理和控制设备,给程序正在使用的每个文件在内存中开辟一个适当大小的缓冲区。 程序要从文件读入一些信息时,系统先一次性地读入足够多的信息存于缓冲区中,供程序一部分一部分地使用; 程序要写信息到文件时,也先把信息写到缓冲区中,待缓冲区写满或写文件结束时,才把缓冲区中的内容写到文件中。 程序要读取文件中的数据,首先打开要读的文件,然后才能从该文件读取数据,并在使用结束时,及时关闭文件。程序要向文件写入数据,也是先打开文件(可能包括建立一个新文件),然后向文件输出数据,最后关闭文件。 C语言本身未提供有关文件操作的输入输出语句,对文件的打开关闭和读写操作都用系统提供的库函数来实现。 8.2 文件类型和文件类型指针变量 文件类型 FILE 操作系统除为文件开辟缓冲区外,还为每个被使用的文件在内存中开辟另一个存储区,用于存放有关对文件进行操作所需的控制信息,如文件名、文件读写状态、文件缓冲区大小和位置、当前读写位置等。 C系统将这些信息存储在一个结构变量中,这种结构的类型由系统预定义,取名FILE,习惯称文件类型。不同系统的文件类型所含内容也不全相同。读者可查阅自已使用的C系统的 stdio.h 文件,在该文件中有FILE的定义。 文件类型指针变量 例如 FILE * fp; 8.3 文件打开和关闭库函数 文件打开库函数fopen() 在读写文件之前,先得打开文件。打开文件可使用库函数fopen()。调用函数fopen() 的一般形式为: fopen(文件名, 使用方式) 其中文件名(可能还包括目录路径)为字符串表达式。使用方式也是一个字符串,用来指明文件的读写方式(见P.234,表8-1)。函数fopen()将返回一个存放文件控制信息结构的指针,该文件的有关控制信息就将存放在该结构中,供以后读写文件操作之用。程序应将调用函数fopen()返回的指针值赋给某个文件指针变量中保存。如语句 fp = fopen("\\usr4\\smp.dat", "r"); 以读方式打开根目录下的usr4子目录中的 smp.dat 文件。 调用函数fopen()时,可能会不能打开。如读方式下打开不存在的文件;在写方式下,外部存贮介质已无剩余的自由空间,或外设故障,或超过系统能同时打开的文件数。文件不能打开时,函数fopen()将返回一个空指针值NULL。考虑到文件不能正常打开的极端情况,所以常用以下形式的C代码描述打开文件: if ((fp = fopen(filename, "r")) == NULL) { printf(“Can not open %s file.\n”, filename); return; } 以上代码以读方式打开一个文件,其中 filename 是某文件名。在调用函数fopen()后立即检查打开是否成功,如果打开不成功,就输出该文件不能打开后返回。 正文文件与二进制文件在使用时,还有一点不同。对于正文文件,输入时,回车符和换行符合成为一个换行符输入;输出时,换行符(’\n’)转换成为回车符和换行符两个字符一起输出。对于二进制文件,不进行上述这种转换,二进制文件中的数据形式与在内存中的数据形式是完全一致的。 系统将常规设备上的输入输出数据流称为标准文件,程序运行时,系统自动打开这些标准文件。它们是标准输入文件stdin 、标准输出文件stdout 、标准出错输出文件stderr和标准打印输出文件s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值