第11章 文件操作 教学PPT_190904ppt课件.pptx
《第11章 文件操作 教学PPT_190904ppt课件.pptx》由会员分享,可在线阅读,更多相关《第11章 文件操作 教学PPT_190904ppt课件.pptx(90页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第11章 文件操作 教学PPT_190904 第第11章章 文件操作文件操作 文件概述 文件打开与关闭 文件读写 文件随机读写 文件检测函数 缓冲区函数 11.1 文件概述对于一台计算机而言,最基本的功能就是存储数据。一般情况下,数据在电脑上都是以文件的形式存放的。程序中需要对文件进行一些操作,例如打开一个文件、向文件写入内容、关闭一个文件等。 11.1.1 计算机中的流在C语言中,将在不同的输入/输出等设备(键盘、内存、显示器等)之间进行传递的数据抽象为“流”。 流实际上就是一个字节序列,输入程序的字节序列被称为输入流,从程序输出的字节序列被称为输出流。11.1.1 计算机中的流 根据数据形
2、式,输入输出流可以被细分为文本流(字符流)和二进制流。文本流和二进制流之间的主要差异是:文本流中输入输出的数据是字符或字符串,可以被修改;二进制流中输入输出的是一系列字节,不能以任何方式修改。文本流与二进制流11.1.1 计算机中的流 在C语言中,有三个系统预定义的流: 标准输入流(stdin,全称standard input):对应键盘输入。 标准输出流(stdout,全称standard output):对应控制台输出。 标准错误输出流(stderr,全称standard error):对应控制台错误输出。这三个标准流都定义在头文件stdio.h中,程序只要包含这个头文件,在程序开始执行时
3、,这些流将自动被打开,程序结束后,则自动关闭,不需要做任何初始化准备。11.1.1 计算机中的流 11.1.2 文件的概念文件是存储在外部介质上的数据的集合。操作系统以文件的形式对数据进行管理,如果要访问数据,必须先通过文件名找到相应的文件,之后才能从文件中读取数据。 一个文件需要有唯一确定的文件标识,以便用户根据标识找到唯一确定的文件。文件标识包含三个部分,分别为文件路径、文件名主干、文件扩展名。11.1.2 文件的概念 11.1.3 文件的分类文本文件二进制文件 11.1.3 文件的分类1、文本文件文本文件又称为ASCII文件,ASCII文件中一个字符占用一个字节,存储单元存放单个字符对应
4、的ASCII码。假设当前需要存储一个整型数据112185,则在文本文件的存储方式如下: 2、二进制文件数据在内存中是以二进制形式存储的,如果不加转换地输出到外存,则输出文件就是一个二进制文件。二进制文件就是存储在内存的数据的映像,也称为映像文件。使用二进制文件存储整数112185,存储形式如下图:11.1.3 文件的分类 总体来说,二进制文件较小,生成的速度快,加载的速度也快,但文件内容往往需要解析才可读。文本文件相对较大,生成与加载的速度比二进制文件要慢,但文本文件无需任何转换就可以看到其内容。11.1.3 文件的分类 11.1.4 文件指针在C语言中,所有的文件操作都必须依靠指针来完成,因
5、此如果要对文件进行操作,必须先定义指向文件的指针,然后通过文件指针完成对文件的操作。文件指针的定义格式如下:FILE *变量名; 11.1.4 文件指针FILE是由系统声明的定义文件指针的结构体,用于保存文件相关信息,如文件名、文件位置、文件大小、文件状态等。不同的系统环境或不同编译器环境下FILE结构体的定义略有差异。 11.1.4 文件指针typedef struct short level;/缓冲区满或空的程度unsigned flags; /文件状态标志char fd;/文件描述符unsigned char hold;/若无缓冲区不读取字符short bsize; /缓冲区大小unsi
6、gned char *buffer;/数据传送缓冲区位置unsigned char *curp;/当前读写位置unsigned istemp;/临时文件指示short token;/无效检测FILE;/结构体类型名 FILE 11.1.4 文件指针当定义一个文件指针时,系统根据FILE结构体分配一段内存空间作为文件信息区,用于存储要读写文件的相应信息。FILE * fp;上述代码定义了文件指针fp,它指向文件信息区,但此时,fp尚未关联任何文件,因此文件信息区未保存任何文件信息。 11.1.4 文件指针文件指针通过fopen()函数关联文件,fopen()函数用于打开文件。fp=fopen(a
7、.txt);上述代码中,通过fopen()函数将文件指针fp与a.txt文件关联起来,a.txt文件的信息(文件名、文件大小、文件位置、文件状态等)就会保存到fp指向的文件信息区,通过文件指针fp就可以操作a.txt文件了。 11.1.4 文件指针 一个文件指针变量只能指向一个文件,如果要操作多少个文件,就要定义同样数量的文件指针,分别指向不同的文件。11.1.4 文件指针 11.1.5 文件位置指针将一个文件与文件指针进行关联之后,即打开了文件,系统会为每个文件设置一个位置指针,用来标识当前文件的读写位置,这个指针称为文件位置指针。 文件位置指针 一般在文件打开时,文件位置指针指向文件的开头
8、。在读取文件时,文件位置指针会自动向后移动,读取结束,文件位置指针指向最后一个数据之后。11.1.5 文件位置指针 当文件读取完毕时,文件位置指针指向最后一个数据之后,这个位置称为文件末尾,用EOF标识,EOF是英文“end of file”的缩写,被称为文件结束符。EOF是一个宏定义,其值为-1,定义在stdio.h头文件中,通常表示不能再从流中获取数据。11.1.5 文件位置指针 向文件中写入数据与从文件中读取数据是相同的,每写完一个数据后,文件的位置指针自动按顺序向后移一个位置,直到数据写入完毕,此时文件位置指针指向最后一个数据之后,即文件末尾。11.1.5 文件位置指针 有时,在向文件
9、中写入数据时,希望在文件末尾追加数据,而不是覆盖原有数据,可以将文件位置指针移至文件末尾再进行写入。11.1.5 文件位置指针 11.2.1 文件打开和关闭文件最基本的操作就是打开和关闭,在对文件进行读写之前,需要先打开文件;读写结束之后,则要及时关闭文件。 1、fopen()函数fopen()函数用于打开一个文件。FILE* fopen(char* filename,char* mode); 返回值类型FILE*表示该函数返回值为文件指针类型; 参数filename用于指定文件的绝对路径,即用来确定文件包含路径名、文件名主干和扩展名的唯一标识; 参数mode用于指定文件的打开模式。11.2.
10、1 文件打开和关闭 打开模式打开模式名称名称描述描述r/rbr/rb只读模式以只读的形式打开一个文本文件/二进制文件,如果文件不存在或无法找到,fopen()函数调用失败,返回NULLw/wbw/wb只写模式以只写的形式创建一个文本文件/二进制文件,如果文件已存在,重写文件a/aba/ab追加模式以只写的形式打开一个文本文件/二进制文件,只允许在该文件末尾追加数据,如果文件不存在,则创建新文件r+/rb+r+/rb+读取/更新模式以读/写的形式打开一个文本文件/二进制文件,如果文件不存在,fopen()函数调用失败,返回NULLw+/wb+w+/wb+写入/更新模式以读/写的形式创建一个文本文
11、件/二进制文件,如果文件已存在,则重写文件a+ab+a+ab+追加/更新模式打开一个文本/二进制文件,允许进行读取操作,但只允许在文件末尾添加数据,若文件不存在,则创建新文件11.2.1 文件打开和关闭 文件正常打开时,函数返回指向该文件的文件指针;文件打开失败时,函数返回NULL。一般在调用该函数之后,为了保证程序的健壮性,会进行一次判空操作。11.2.1 文件打开和关闭FILE * fp;fp = fopen(D:test.txt, r);if(fp = NULL) printf(打开失败!n); exit(0); / 退出程序 mode参数为char *类型,在实际开发过程中必须使用字符
12、串的形式,如果将字符串“r”写成字符r就会使程序出现错误。11.2.1 文件打开和关闭 2、fclose()函数fclose()函数用于关闭文件。int fclose(FILE *fp);参数fp表示待关闭的文件;函数返回值类型为int,如果成功关闭则返回0,否则返回EOF。11.2.1 文件打开和关闭 #define _CRT_SECURE_NO_WARNINGS#include #include int main() FILE* fp; fp = fopen(hello.txt, w); if (fp = NULL)printf(无法打开hello.txtn);exit(0); fputs
13、(Hello, world!n, fp); fclose(fp); printf(文件写入成功n); return 0;11.2.1 文件打开和关闭 11.2.2 文件写入1、使用fputc()函数向文件写入字符fputc()函数用于向文件中写入一个字符。int fputc(int c, FILE* stream); c表示写入的内容; stream表示一个文件指针。 函数返回值为int类型 返回成功写入的字符; 写入失败返回EOF。 11.2.2 文件写入FILE *fp;int i=0;char arr=I Like C Program;fp = fopen(hello.txt, w);
14、if (fp = NULL)printf(打开文件失败!n);exit(0);while (arri != 0) fputc(arri, fp);i+;fclose(fp); 11.2.2 文件写入程序成功运行后,在项目根目录下会生成hello.txt文件。 11.2.2 文件写入2、使用fputs()函数向文件写入字符串fputs()函数用于将字符串写入文件。int fputs(const char *str, FILE* stream);参数str表示指向待写入的字符串的字符指针,参数stream表示文件指针。fputs()函数向指定的文件写入一个字符串(不自动写入字符串结束标记符0),如
15、果写入成功,函数返回0,否则返回EOF。 11.2.2 文件写入FILE * fp;char * str3; int i;str0 = I Like C Programn; str1 = It Is Amazingn;str2 = It Is Interestingn;fp = fopen(hello.txt, w);if(fp = NULL)printf(打开文件失败!n);exit(0);for (i = 0; i 3; i+)fputs(stri, fp);fclose(fp); 11.2.2 文件写入程序成功运行后,在项目根目录下打开hello.txt文件。 11.2.2 文件写入3、
16、使用fwrite()函数向文件写入数据fwrite()函数用于以二进制的形式将数据写入文件。size_t fwrite(const void * ptr, size_t size, size_t nmemb, FILE * stream);参数ptr表示指向待写入数据的指针;参数size表示待写入数据的字节数;参数nmemb表示待写入size个字节的数据的个数;参数stream表示文件指针;返回值:写入成功返回写入的数据个数,写入失败返回0。 11.2.2 文件写入程序执行成功后,会在项目根目录中生成fread.txt文件,打开fread.txt文件,发现字符串被成功写入文件。 11.2.2
17、文件写入4、使用fprintf()函数向文件写入数据fprintf()函数用于将数据格式化写入文件。int fprintf(FILE * stream, const char * format,.); 参数stream表示文件指针; 参数format表示以什么样的字符串格式输出到文件中;该函数根据指定的字符串格式将字符串写入到指定的文件中。 函数调用成功返回输出的字符数;否则,返回EOF。 11.2.2 文件写入FILE *fp;fp = fopen(hello.txt, w); if (fp = NULL)printf(打开文件失败!n);exit(0);fprintf(fp, I am a
18、 %s, I am %d years old., student, 18);fclose(fp); 11.2.2 文件写入程序运行成功后,会在当前项目根目录下生成一个hello.txt文件,打开文件,发现字符串被成功写入文件hello.txt中。 11.2.3 文件读取1、使用fgetc()函数读取文件中的字符fgetc()函数用于读取文件中的字符。int fgetc(FILE* stream);参数stream表示一个文件指针。函数将读取的字符转换成整数返回,读取文件到达末尾或读取错误时返回EOF。 11.2.3 文件读取FILE *fp;char ch;fp = fopen(hello.t
19、xt, r);if (fp = NULL)printf(打开文件失败!n);exit(0); ch = fgetc(fp);while (ch != EOF)printf(%c, ch);ch = fgetc(fp);printf(n);fclose(fp); 11.2.3 文件读取2、使用fgets()函数读取文件中的字符串fgets()函数用于从文件中读取一行字符串,或读取指定长度的字符串。char * fgets(char * s, int size, FILE * stream); 参数s指向用来存储数据的空间; 参数size表示读取数据的大小; 参数stream表示要读取的文件的文件
20、指针。 函数读取成功返回s,如果读取错误或遇到文件末尾,返回NULL。 11.2.3 文件读取fgets()函数从文件指针stream指向的文件中读取数据,最多读取size-1个字符,将读取的数据保存到s指向的字符数组中,读取的字符串会在最后一位添加0。 11.2.3 文件读取fgets()函数停止读取的情况通常包括以下三个: 读取size-1个字符前,遇到n,读取结束,末尾添加0。 读取size-1个字符前,遇到EOF,读取结束,末尾添加0。 完成size-1个字符读取,读取结束后,末尾添加0。 11.2.3 文件读取FILE * fp;char str256;memset(str, 0,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第11章 文件操作 教学PPT_190904ppt课件 11 文件 操作 教学 PPT_190904ppt 课件
限制150内