C及C++程序设计 第3版 教学课件 ppt 张富 第13章-磁盘文件操作(IO系统)

上传人:E**** 文档编号:89343864 上传时间:2019-05-23 格式:PPT 页数:104 大小:437KB
返回 下载 相关 举报
C及C++程序设计 第3版  教学课件 ppt 张富 第13章-磁盘文件操作(IO系统)_第1页
第1页 / 共104页
C及C++程序设计 第3版  教学课件 ppt 张富 第13章-磁盘文件操作(IO系统)_第2页
第2页 / 共104页
C及C++程序设计 第3版  教学课件 ppt 张富 第13章-磁盘文件操作(IO系统)_第3页
第3页 / 共104页
C及C++程序设计 第3版  教学课件 ppt 张富 第13章-磁盘文件操作(IO系统)_第4页
第4页 / 共104页
C及C++程序设计 第3版  教学课件 ppt 张富 第13章-磁盘文件操作(IO系统)_第5页
第5页 / 共104页
点击查看更多>>
资源描述

《C及C++程序设计 第3版 教学课件 ppt 张富 第13章-磁盘文件操作(IO系统)》由会员分享,可在线阅读,更多相关《C及C++程序设计 第3版 教学课件 ppt 张富 第13章-磁盘文件操作(IO系统)(104页珍藏版)》请在金锄头文库上搜索。

1、,第13章 磁盘文件操作(I/O系统),13.1 文 件 概 述,13.1.1 C语言文件的概念 文件(file)是存储在外部介质(如磁盘,磁带)上的,以惟一的名字作为标记的数据集合。操作系统是以文件为单位对数据进行管理的。,与主机相连的输入输出设备,其作用也是从设备上读取数据和将数据写到设备上,所以,也把输入输出设备看作是文件。,给每个文件起一个名字。完整的磁盘文件名的组成如下: 盘符:路径(基本)文件名.扩展名 操作系统支持对文件的各项管理,文件的命名应符合操作系统的规定。,文件操作的主要有两个,一是从文件取出数据存入内存变量中,这就是文件的读操作。二是将内存变量中存放的数据存放到文件中,

2、这就是文件写操作。统称为文件的I/O操作。,由于文件是受操作系统管理的,应用程序使用某一文件时,它需要向操作系统提出建立与文件的联系;使用结束时,通知操作系统切断与文件的联系。这是两个过程,前者称为打开文件,后者称为关闭文件。,在C语言中,文件的打开与关闭,文件的读操作与写操作,都是由C语言提供的系统函数完成的。,13.1.2 二进制文件和文本文件 文件数据的存储,一般有两种形式。一种是以ASCII码的形式按字节存储的。这样的文件叫做文本文件(text file),又叫ASCII文件。另一种是以在内存中的二进制数形式存储的文件,称为二进制文件。,13.1.3 顺序文件和随机文件 按照文件内数据

3、处理方式的不同,文件又分为顺序文件和随机文件。,顺序文件是按照数据存储的顺序连续地处理(读或写)每一个数据。为了处理文件中某个数据,必须从文件的第一个数据开始,顺序取完指定数据前所有的数据,才能处理该数据。,随机文件处理数据时,可以在文件中任意指定的位置读写数据。,13.1.4 缓冲文件系统和非缓冲文件系统 按系统对文件的支持方式的不同,分为缓冲文件系统和非缓冲文件系统。C语言支持这两种文件系统。,所谓缓冲文件系统(buffered file system)是指在进行I/O操作时,系统自动为每个打开的文件开辟一个内存缓冲区。,采用缓冲区的目的是,匹配快速的CPU和慢速的磁盘操作,提高CPU的工

4、作效率,减少访问磁盘的次数。图13-1所示给出缓冲文件系统的示意图。,图13-1 数据通过缓冲区读取示意图,所谓非缓冲文件系统(unbuffered file system)是指系统不自动开辟内存缓冲区,而是由程序自己为每个文件设定缓冲区。,13.1.5 文件型指针 在ANSI文件I/O系统中,每个被使用的文件,都在内存开辟一个区,用于存放与文件相关的信息,如文件号(文件在操作系统中被管理的代号),文件的读写状态,文件缓冲区的地址,以及当前的读写缓冲区数据的位置等。,这些信息存放在一个结构型变量中。这个结构类型是系统定义的,并通过typedef将该结构型起名为FILE。FILE结构型定义在st

5、dio.h文件中。,其定义如下: typedef struct ,int _fd; int _cleft; int _mode; char *nextc; char *buff; FILE;,程序使用文件,首先必须定义一个FILE型结构的指针变量。这个指向FILE结构型的指针称为文件型指针。通过这个指针可以实现对文件的操作。,定义文件指针变量的一般形式为: FILE *文件型指针名; 可以同时定义多个文件型指针。,13.2 打开文件和关闭文件,打开文件的意思是使定义的文件型指针指向打开的文件,包括为文件型变量分配内存空间,在内存为文件建立缓冲区,将文件和缓冲区的相关信息写入文件型变量的各成员中

6、。,文件使用完后,系统将缓冲区中的数据做相应的处理(如将数据写入文件等),然后,释放缓冲区。这个过程叫做关闭文件。,13.2.1 打开文件函数 打开文件函数fopen()的格式为: FILE *fopen(char *filename, char *mode),其中参数filename是字符型指针,它指向的字符串是要打开的文件名。参数mode也是字符型指针,它指向的字符串是文件的使用方式,称为打开模式。,文件的使用方式字符串共有12个,其中6个是用于文本文件的,6个用于二进制文件的。这些字符串及其功能如表13-1所示。,fopen()函数的功能是,以mode方式打开filename指定的文件,

7、自动为该文件分配一个内存缓冲区。,如果正确打开文件,函数返回一个指向文件型变量的地址。用户可以用自己定义的文件型指针接受这个地址。此后,便可利用这个文件型指针对文件进行读写操作。,如果打开文件操作不成功(出错),函数返回空指针(“NULL”),其值为0。因此,打开文件时,一般要对返回值进行判断,以便知道文件是否被成功打开。如果没打开,就不能使用这个文件。,函数fopen()定义在头文件stdio.h。,13.2.2 关闭文件函数 关闭文件函数fclose()的格式是: int fclose(FILE *fp),这里形式参数文件型指针变量fp是调用函数fopen()打开文件时返回的文件型指针。函

8、数的功能是,关闭fp指向的文件,释放分配给文件的内存缓冲区。,当文件打开用于写时,在关闭时,把暂时存在缓冲区的内容写到文件中去,然后,释放文件的缓冲区。 当正确关闭指定的文件时,函数返回0;否则返回非0。,此函数也定义在头文件stdio.h中。,13.2.3 标准设备文件 系统规定,标准输入设备为键盘,标准输出设备为显示器。 当程序运行时,系统自动打开标准设备文件,分配文件号。当程序运行结束时,系统又自动将这些标准设备文件关闭。,程序运行时,系统共打开五个标准设备文件,表13-2列出来这些标准设备文件的文件名,文件号和文件指针。用户程序可以像使用一般文件指针那样直接使用这些设备的指针,而不需要

9、打开和关闭操作。,13.3 文件的读和写,成功地打开文件后,就可以对文件进行读和写操作了。对文件的读写是用一系列函数实现的。,C语言提供了四组文件读写函数: (1)字符文件读写函数fgetc()和fputc(); (2)数据块文件读写函数fread()和fwrite();,(3)格式文件读写函数fscanf()和fprintf(); (4)字符串文件读写函数fgets()和fputs()。,除此以外,为配合文件的读写操作,还提供有文件测试函数和文件随机定位函数等。所有关于读写的系统函数均定义在头文件“stdio.h”中。,13.3.1 字符文件读写函数 1写字符文件函数fputc() Fput

10、c()函数的功能是,将字符ch写到文件指针fp所指向的文件的当前写指针的位置。,函数的格式为: int fputc (int ch, File *fp) 其中参数fp为文件指针,它的值是执行函数fopen()打开文件时获得的。ch为字符变量,其值即为所要写进文件的字符。,整个程序由以下几个部分构成: (1)定义一个文件指针fp; (2)用写模式打开(建立)文件test,并检查是否确实打开;,(3)将从键盘读入的字符串用fputc()函数写入(输出)到文件tset; (4)关闭文件。,2读字符文件函数fgetc() fgetc()函数的格式为: int fgetc(FILE *fp),其中fp为

11、文件指针,它的值是通过fopen()打开文件时获得的。函数的功能是从fp所指向的文件当前读指针位置读取一个字符。正常调用情况下,函数返回所写的字符码值。出错时或文件当前位置是文件尾时,返回EOF(1)。,13.3.2 文件尾测试函数、错误测试函数和文件头定位函数 介绍三个函数。,1文件尾测试函数feof() feof()函数的格式为: int feof(FILE *fp) 函数feof()的功能是,测试fp所指向文件的最后一次操作时,是否已到文件尾。如果已到文件尾,函数返回一个真值;否则返回0。,2文件错误测试函数ferror() 文件错误测试函数的格式为: int ferror(FILE *

12、fp) 函数ferror()的功能是测试文件指针fp所指向文件,在最后一次操作中是否发生错误。,【例13-4】 应用函数ferror和feof()的例子。 程序的功能是复制任意类型的文件,即读入一个文件f1,然后,将其写入另一个文件f2。,整个程序分为以下几个部分: (1)打开文件f1(“rb”模式); (2)打开文件f2(“wb”模式);,(3)读文件f1,测试操作是否有错误; (4)写文件f2,测试操作是否有错误; (5)关闭两个被打开的文件。 程序的流程如图13-2所示。,图13-2 例13-4复制文件程序流程图,3文件头定位函数rewind() rewind()函数格式为: void

13、rewind(FILE *fp) rewind()函数的功能是将文件内部指针置于fp所指文件的开头。,13.3.3 字符串文件读写函数 1写字符串文件函数fputs() fputs()函数格式为: char fputs(char *str, FILE *fp),其中参数str是字符型指针,可以是字符串常量,或存放字符串的数组首地址。fp是文件型指针,通过打开文件函数fopen()获得的。,函数fputs()的功能是,将参数str指向的字符串(舍掉结束标记0)写入fp指向的文件。文件内部指针自动后移一个字符串的位置。,fputs()函数正确执行时,返回最后写入的字符,错误时,返回EOF(1)。,

14、2读字符串文件函数fgets() 函数fgets()的格式为: char *fgets(char *str,int length, FILE *fp),其中参数str为字符串指针,可以是存放字符串的字符型数组首地址,也可以是指向某个存放字符串的内存区域的指针;length为字符串长度,可以是整型常量,变量或表达式;fp为FILE型文件指针变量。,函数fgets的功能是,从fp所指文件当前位置读取(length-1)个字符,在其后加上一个字符串结束标记0,组成字符串,存入str指定的内存区。,13.3.4 数据块文件读写函数 数据块文件读写函数用于二进制文件的读和写。,1数据块文件写函数fwri

15、te() 函数fwrite()的格式为: unsigned fwrite(void *buffer, unsigned num_bytes, unsigned count, FILE *fp),其中参数buffer是指向将要写到文件中的数据块指针,可以是存放数据的变量地址或数组首地址。num_bytes是无符号整型,可以是常量、变量或表达式。它是写入文件的每个数据的所占用的字节数。,count是无符号整型,可以是常量、变量或表达式。它是写入文件的数据个数。fp是指向预先打开的文件的指针。,fwrite()函数的功能是,将buffer指向的count个数据(每个数据num_bytes字节)写入f

16、p指向的文件。fwrite()函数一次写入文件的字节数为: countnum_bytes,当正确地写入count个数据后,内部指针自动后移countnum_bytes个字节。函数返回count值;如果发生写错误,则返回NULL(0)。,2数据块文件读函数fread() 函数fread()的格式为: unsigned fread(void *buffer, unsigned num_bytes, unsigned count, FILE *fp),其中参数buffer是存放数据的变量地址或数组首地址。num_bytes是无符号整型,可以是常量、变量或表达式,代表写读取文件每个数据的所占用的字节总数。,count是无符号整型,可以是常量、变量或表达式,代表读取文件的数据的个数。fp是指向预先打开的文件的指针。,fread()函数的功能是从fp所指向的文件的当前位置读取count个数据,每个数据的字节数

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号