C语言程序设计课件 第8章 文件_第1页
C语言程序设计课件 第8章 文件_第2页
C语言程序设计课件 第8章 文件_第3页
C语言程序设计课件 第8章 文件_第4页
C语言程序设计课件 第8章 文件_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章文件第8章文件8.1.1初识文件8.1.2文件类型指针8.1文件概述第8章文件文件是指存储在某种长期储存介质(如硬盘、固态硬盘、光盘、USB闪存驱动器等)上的数据集合。文件可以包含任何形式的数据,例如,文本、图像、音频、视频、程序代码或其他类型的文档。1.文件基本概念文件是计算机中的一个重要概念,存储程序代码的文件称为程序文件,存储数据的文件称为数据文件。每个文件都有一个名称,文件名是文件的标识,操作系统以文件为单位对数据进行管理,通过文件名访问文件。(1)文件名和扩展名。每个文件都有一个名字用于标识它,通常由基础文件名加上扩展名组成。扩展名用来指示文件的类型或用途(例如,.txt表示纯文本文件,.jpg表示JPEG格式的图片文件)。(2)文件路径。为了准确地定位到某个文件,操作系统使用文件路径来描述文件在文件系统中的位置。路径可以是绝对路径(从根目录开始的完整路径),也可以是相对路径(相对于当前工作目录的路径)。(3)文件属性。文件可能拥有一系列属性,包括但不限于创建时间、修改时间、访问权限(如只读、隐藏)、大小等信息。8.1文件概述8.1.1初识文件第8章文件2.文件的分类在C语言中,文件可以根据不同的标准进行分类。主要的分类方式包括根据文件内容和根据访问模式来区分。(1)根据文件内容分类。①文本文件(TextFiles)。文本文件存储的是基于字符的数据,通常是由ASCII或Unicode编码的字符序列。这类文件可以直接用文本编辑器打开查看和编辑。在C语言中,对文本文件的操作主要是读写字符或字符串。②二进制文件(BinaryFiles)。二进制文件存储的是以二进制形式表示的数据,这些数据可以是任何类型的,如整数、浮点数、图像数据等。与文本文件不同,二进制文件不是以可读的字符形式存储数据,因此不能直接用文本编辑器打开阅读。它们需要特定的应用程序来解释和使用其中的数据。(2)根据访问模式分类。①顺序文件(SequentialFiles)。在C语言中,默认情况下,文件是以顺序访问模式打开的。这意味着要访问文件中的某个位置的数据,必须从文件的开始部分依次读取直到到达目标位置。对于大型文件来说,这可能效率不高。②随机访问文件(RandomAccessFiles)。通过指定特殊的标志(如fopen函数中的"rb+"或"wb+"),可以以随机访问模式打开文件。这种方式允许程序直接跳转到文件的任意位置进行读写操作,提供了更高的灵活性和效率,尤其适合于需要频繁访问文件中不同位置数据的情况。在C语言中,使用标准库函数,如fopen、fclose、fread、fwrite、fseek等来实现对文件的打开、关闭、读取、写入及定位等操作。选择何种类型的文件取决于具体应用的需求以及数据处理的方式。8.1文件概述8.1.1初识文件第8章文件在C语言中,文件类型指针用于指向一个打开的文件,以便对该文件进行读、写或其他操作。这个指针实际上是指向FILE结构体类型的变量,该结构体由标准库定义,并包含了文件的各种信息(如文件位置指针、缓冲区状态、错误指示器等)。通过使用FILE指针,程序可以与外部存储设备上的文件进行交互。1.定义文件指针的语法格式在C语言中,若用一个指针变量指向一个文件,这个指针就称为文件类型指针,简称文件指针。通过文件指针就可以对它所指向的文件进行各种操作。每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的相关信息。这些信息是保存在一个结构体变量中,该结构体类型是由系统声明的,取名为FILE。不同的C编译系统的FILE类型包含的内容不完全相同,但都大同小异。FILE结构体类型的信息包含在头文件<stdio.h>中。在程序中可以直接用FILE类型名定义变量。每一个FILE类型变量对应一个文件的信息区,在其中存放该文件的相关信息。定义文件指针的语法格式如下。FILE*指针变量标识符其中,FILE应为大写,它实际上是由系统定义的一个结构,在编写源程序时不必关心FILE结构的细节。8.1文件概述8.1.2文件类型指针第8章文件8.1文件概述8.1.2文件类型指针2.指向文件的指针变量实例通常一般不定义FILE类型的变量,也就是不通过变量的名字来引用这些变量,而是设置一下指向FILE类型变量的指针变量,然后通过它来引用这些FILE类型变量,这样使用起来比较方便。下面定义一个指向文件类型数据的指针变量。FILE*fp定义fp是一个指向FILE类型数据的指针变量,可以使用fp指向某个文件的文件信息区,通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够找到与它关联的文件。如果有n个文件,就设n个指针变量,分别指向n个FILE类型变量,以实现n个文件的访问,如图8.1所示。第8章文件8.2.1文件打开与关闭8.2.2文件读写8.2文件操作第8章文件文件在里德读写操作之前需要先打开,使用完毕后需要关闭文件。所谓打开文件,实际上建立文件的各种相关信息,并使文件指针指向该文件,以便进行其他操作。关闭文件则是断开指针与文件之间的联系,也就是禁止再对该文件进行操作。1.文件打开(fopen函数)在C语言中,文件的打开是通过标准库函数fopen()来实现的。这个函数定义在<stdio.h>头文件中。fopen()函数的语法格式如下。FILE*fopen(constchar*filename,constchar*mode);其中,*filename(constchar):这是一个字符串,表示要打开的文件的路径和名称。可以是相对路径或绝对路径。*mode(constchar):这是一个字符串,指定打开文件的模式。例如:FILE*fp("d:\\file_01.txt","r");表示以只读方式打开D:\盘的file_01.txt文件,其中,两个反斜杠“\\”中的第1个表示转义字符,第个2表示根目录。8.2文件操作8.2.1文件打开与关闭第8章文件文件打开方式指出要对文件进行何种操作,常见的文件打开方式,如表8.1所示。8.2文件操作8.2.1文件打开与关闭第8章文件对于文件打开方式的使用,需要注意以下几点问题。(1)以“r”打开一个文件时,该文件必须已经存在,且只能从该文件中读出,如果文件不存在,则操作失败。(2)以“w”打开的文件只能向该文件写入,如果文件已存在,其内容将被清空(覆盖)。如果文件不存在,则创建它。(3)以“a”打开的文件,在文件末尾追加数据。如果文件不存在,则创建它。(4)在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判断是否完成打开文件操作,并做出相应的处理。2.文件关闭(fclose函数)在C语言中,文件的关闭是通过标准库函数fclose()来完成的。这个函数同样定义在<stdio.h>头文件中。文件操作结束后,要使用fclose()函数关闭文件。关闭文件操作的是将文件缓冲区中还未写入文件的数据写入文件中,确保数据的完整性,同时释放文件占用的缓冲区单元。fclose()函数的语法格式如下。intfclose(FILE*stream);其中,*stream是一个指向FILE类型的指针,该指针必须是由fopen()、freopen()等函数成功打开文件后返回的,它标识了要关闭的特定文件。例如:

fclose(fp);如果文件成功关闭,fclose()返回0;如果关闭文件时发生错误(例如,写入缓冲区中的数据无法刷新到磁盘),fclose()返回EOF(通常定义为-1)。8.2文件操作8.2.1文件打开与关闭第8章文件在C语言中,文件读写操作是通过标准I/O库(<stdio.h>)提供的函数来完成的。这些函数使用FILE*指针(由fopen()返回)来标识要操作的文件。1.读字符fgetc()函数fgetc()函数的功能是从指定的文件中读取一个字符,其语法格式如下。intfgetc(FILE*stream);如果读取成功,则返回读取的字符(函数返回值为int类型)。如果到达文件末尾(常量EOF)或发生错误,返回EOF通常为-1)。【实例8.1】利用fgetc()函数读取文件file_01.txt中内容,并将其文件内容显示到屏幕上。程序代码如下。

#include<stdio.h>intmain(){intch;//必须是int类型,以容纳EOFFILE*fp=fopen("file_01.txt","r");if(fp){while((ch=fgetc(fp))!=EOF){putchar(ch);//将读取的字符输出到屏幕

}fclose(fp);}printf("\n");return0;}8.2文件操作8.2.2文件读写第8章文件程序运行结果如下。1.apple2.banana3.cherry4.orange5.grape6.strawberry7.blueberry8.peach9.mango10.Pineapple8.2文件操作8.2.2文件读写第8章文件2.写字符fputc()函数fputc()函数的功能是把一个字符写入指定的文件中,其语法格式如下。intfputc(intc,FILE*stream);其中,c(int):要写入的字符。虽然名为c,但它是一个int类型。这是为了能够容纳EOF(通常为-1)这个特殊值,以便与有效的字符区分开来,需要传入一个字符常量或变量(它会被转化为int)。*stream(FILE):指向一个已由fopen()成功打开(且模式允许写入,如"w","a","r+","w+","a+")的FILE对象的指针。8.2文件操作8.2.2文件读写第8章文件【实例8.2】利用fputc()函数写入文件,并将其文件内容显示到屏幕上。程序代码如下。

#include<stdio.h>#include<stdlib.h>#include<conio.h>intmain(){FILE*fp;charch;if((fp=fopen("file_02.txt","w+"))==NULL){printf("不能打开文件,请按任意键盘退出!");getch();//从控制台读取单个字符而不回显到屏幕

exit(1);}

8.2文件操作8.2.2文件读写第8章文件printf("请输入一行字符串:\n");ch=getchar();while(ch!='\n'){fputc(ch,fp);//写入一个字符到文件中

ch=getchar();}rewind(fp);//重置到文件的开头

ch=fgetc(fp);while(ch!=EOF){putchar(ch);//将单个字符输出显示

ch=fgetc(fp);}printf("\n");fclose(fp);return0;}程序运行结果如下。请输入一行字符串:welcometohere!welcometohere!8.2文件操作8.2.2文件读写第8章文件3.读字符串fgets()函数fgets()函数的功能是从文件中读取一行字符串,其语法格式如下。char*fgets(char*str,intn,FILE*stream);其中,*str(char):一个指向字符数组(缓冲区)的指针。读取到的字符串将被存储到这个数组中。n(int):指定要读取的最大字符数。这个值至关重要,它限制了fgets()可以写入str的字符数量,是防止缓冲区溢出的关键。*stream(FILE):指向一个已由fopen()成功打开的FILE对象的指针,表示要从中读取数据的文件,也可以是标准输入stdin。8.2文件操作8.2.2文件读写第8章文件【实例8.3】利用fgets()函数读取文件,并将其文件内容显示到屏幕上。程序代码如下。(插入二维码V8-3读字符串fgets函数的使用)#include<stdio.h>#include<stdlib.h>#include<conio.h>intmain(){FILE*fp;charstr[10];if((fp=fopen("file_01.txt","r"))==NULL){printf("不能打开文件,请按任意键盘退出!");exit(1);}while(fgets(str,10,fp)!=NULL){//文件中读取一行字符串

printf("%s",str);}printf("\n");fclose(fp);return0;}8.2文件操作8.2.2文件读写第8章文件程序运行结果如下。1.apple2.banana3.cherry4.orange5.grape6.strawberry7.blueberry8.peach9.mango10.Pineapple8.2文件操作8.2.2文件读写第8章文件4.写字符fputs()函数fputs()函数的功能是把一行字符写入指定的文件中,其语法格式如下。intfputs(constchar*str,FILE*stream);将字符串str(不包括其结尾的空字符'\0')写入stream。fputs()不会自动添加换行符'\n'。成功时返回一个非负数,失败时返回EOF。8.2文件操作8.2.2文件读写第8章文件【实例8.4】利用fputs()函数写入文件,并将其文件内容显示到屏幕上。程序代码如下。

#include<stdio.h>intmain(){intch;//必须是int,以容纳EOFFILE*fp=fopen("file_04.txt","w+");if(fp){fputs("Hello,World!\n",fp);//需要手动添加\nfputs("Thisisline2.",fp);//这行没有换行符

fputs("\n",fp);//手动添加换行符

fclose(fp);}fp=fopen("file_04.txt","r");//以只读方式打开文件if(fp){while((ch=fgetc(fp))!=EOF){putchar(ch);//将读取的字符输出到屏幕

}fclose(fp);}return0;}程序运行结果如下。Hello,World!Thisisline2.8.2文件操作8.2.2文件读写第8章文件5.格式化读写fscanf()函数和fprintf()函数fscanf()和fprintf()是C语言中用于格式化读写文件的函数,它们的用法类似于scanf()和printf(),但操作对象是文件。【实例8.5】利用fscanf()函数和fprintf()函数读写文件,并将其文件内容显示到屏幕上。程序代码如下。#include<stdio.h>#include<stdlib.h>#include<conio.h>structstu{charname[10];intnum;intage;charaddr[15];}stu1[2],stu2[2],*p,*q;8.2文件操作8.2.2文件读写第8章文件intmain(){FILE*fp;inti;p=stu1;q=stu2;if((fp=fopen("file_05.txt","wb+"))==NULL){printf("不能打开文件,请按任意键盘退出!");getch();exit(1);}printf("请输入学生信息:\n");printf("姓名学号年龄地址\n");for(i=0;i<2;i++,p++)scanf("%s%d%d%s",p->name,&p->num,&p->age,p->addr);printf("\n");8.2文件操作8.2.2文件读写第8章文件printf("学生信息:\n");printf("姓名\t学号\t年龄\t地址\n");p=stu1;for(i=0;i<2;i++,p++)fprintf(fp,"%s%d%d%s",p->name,p->num,p->age,p->addr);rewind(fp);for(i=0;i<2;i++,q++)fscanf(fp,"%s%d%d%s",q->name,&q->num,&q->age,q->addr);q=stu2;for(i=0;i<2;i++,q++)printf("%s\t%d\t%d\t%s\n",q->name,q->num,q->age,q->addr);fclose(fp);return0;}8.2文件操作8.2.2文件读写第8章文件程序运行结果如下。请输入学生信息:姓名学号年龄地址张三20250120辽宁沈阳李四20250221辽宁大连学生信息:姓名学号年龄地址张三20250120辽宁沈阳李四20250221辽宁大连8.2文件操作8.2.2文件读写第8章文件6.数据块读写fread()函数和fwrite()函数fread()和fwrite()是C语言中用于以二进制方式批量读写数据块的函数,常用于高效地处理数组、结构体等连续数据的文件读写。【实例8.6】利用fread()函数和fwrite()函数读写文件,并将其文件内容显示到屏幕上。程序代码如下。#include<stdio.h>#include<stdlib.h>#include<conio.h>structstu{charname[1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论