8- 利用文件进行数据管理_第1页
8- 利用文件进行数据管理_第2页
8- 利用文件进行数据管理_第3页
8- 利用文件进行数据管理_第4页
8- 利用文件进行数据管理_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

教学内容: 第1章:C语言语法基础第2章:C程序设计基础第3章:利用数组处理同类型的批量数据第4章:利用函数实现模块化程序设计第5章:灵活使用指针第6章:结构体、共用体、枚举类型及其应用第7章:常用的三种线性数据结构第8章:利用文件进行数据管理第9章:嵌入式技术基础实践方法C语言程序设计8.1文件概述8.2文件的打开与关闭8.3顺序读写数据文件8.4随机读写数据文件8.5文件读写的出错检测【学习内容】

第8章利用文件进行数据管理【学习目标】

1.理解文件的相关概念;2.掌握文件的打开与关闭操作方法;3.掌握文件的各种读写操作方法;4.掌握文件在数据管理中的应用。

0x310x320x330x7B

十进制数123对应的两种形式8.1.1文件的分类1、按照文件内容分类8.1文件概述

(2)数据文件:内容不是程序,而是供程序运行时读写的数据。

(1)程序文件:内容是程序代码,包括.c、.obj、.exe文件等。

操作系统将每一个输入、输出设备都看作一个数据文件。例如,键盘是输入文件,显示器和打印机是输出文件。

文件是指存储在外部介质(如磁盘等)上数据的集合。操作系统是以文件为单位对数据进行管理的。在数据管理类的程序设计中,可从文件中读取数据,或向文件中写入数据。

2、按照数据的组织形式分类

(1)文本文件:也称ASCII文件,其中的每个字符对应一个字节(ASCII码)。

(2)二进制文件:以内存中存储形式(二进制形式)原样输出到外存。C语言中,对二进制文件的访问速度比对文本文件的访问速度快。8.1.2文件缓冲区8.1文件概述

系统自动地在内存中为程序中每一个正在使用的文件开辟一个文件缓冲区。

内存向磁盘输出数据:先将数据送到内存缓冲区,装满缓冲区后再一起送到磁盘。

磁盘向内存输入数据:先一次从磁盘文件将一批数据输入到内存缓冲区,再从缓冲区逐个将数据送到程序数据区。8.1.3文件类型指针8.1文件概述

使用一个文件时,系统将在内存中为该文件开辟一个文件信息区,用来存放文件的有关信息(如文件名、文件状态、文件当前位置等)。这些信息保存在一个结构体变量中,该结构体类型名由系统声明为FILE。

例如VC++提供的stdio.h头文件中有以下的文件类型声明:

若使fp指向某个文件的文件信息区,则可通过fp访问该文件。对文件操作之前,须使用FILE定义指向文件的指针变量。例如:FILE*fp;

8.2.1用fopen函数打开数据文件8.2文件的打开与关闭

fopen函数的调用方式:

FILE*fp;//定义FILE类型的指针变量fpfp=fopen(文件名,文件使用方式);

//将fopen函数返回值(地址)赋给指针变量fp例如:FILE*fp;

fp=fopen("file1",

"r");

//为了读取文件file1,打开文件,并使fp指向file1文件

对文件的操作一般要先后经过打开、读或写、关闭3步。在C语言中,对文件的打开、读或写、关闭等操作都是通过库函数来实现的。

(2)实际应用:

if((fp=fopen("file1","r"))==NULL)//若打开文件失败 { printf("不能打开此文件\n"); exit(0);//关闭文件,终止正在执行的程序

}说明:

(1)文件名:双撇号括起来的字符串、字符数组名或指向字符串的指针。8.2文件的打开与关闭

说明:

(3)文件的使用方式及含义8.2.1用fopen函数打开数据文件8.2.2用fclose函数关闭数据文件8.2文件的打开与关闭

对文件读或写操作结束后,应调用fclose函数关闭该文件。若不关闭而直接退出程序,可能会使文件缓冲区中未写入文件的数据丢失。

fclose(fp);

//关闭fp指向的文件(成功,返回0;否则返回文件结束标志EOF)8.3顺序读写数据文件

8.3.1对文件读写一个字符从文本文件中读取一个字符和向文本文件中写入一个字符的函数:

用fopen函数打开一个文件后,即可对该文件进行顺序读写或随机读写。

顺序读写:对文件读写数据的顺序和数据在文件中的物理顺序一致,是从文件的开头逐个字符进行读写。包括:读写字符、读写字符串、格式化读写、数据块读写,均通过库函数实现。8.3顺序读写数据文件

【例8.1】从键盘上输入一些字符,逐个写入到指定文件file1.txt中;然后再从该文件中读取这些字符,并在显示屏上显示。8.3.1对文件读写一个字符自主学习:测试文件是否结束函数feof(fp):若结束,返回非0值,否则返回0。8.3.2对文件读写一个字符串8.3顺序读写数据文件

从文本文件中读取一个字符串和向文本文件中写入一个字符串的函数:8.3顺序读写数据文件

【例8.3】从键盘上输入一个字符串,写入到指定文件file1.txt中;然后再从该文件中读取这个字符串,并在显示屏上显示。8.3.2对文件读写一个字符串8.3.3格式化读写文件8.3顺序读写数据文件

scanf函数和printf函数是以“终端”为对象的格式化输入、输出函数。

而fscanf函数和fprintf函数是以“文件”为对象的格式化输入、输出函数。 fscanf(fp,"%d%f",&i,&j);//格式化读取文件若文件指针fp指向的文件中有数据3和5.8,则从fp指向的文件中分别读取数据3和5.8送给变量i和j。

fprintf(fp,"%d,%f",i,j);//格式化写入文件把变量i和j的值分别按%d和%f的格式输出(写入)到fp指向的文件中。例如:8.3顺序读写数据文件

【例8.4】将学生的数据信息写入指定文件file1.txt中;然后再从该文件中读取学生的数据信息,并在显示屏上显示。8.3.3格式化读写文件8.3.4用二进制方式对文件读写一组数据8.3顺序读写数据文件

使用fscanf函数和fprintf函数对磁盘文件进行格式化读写时,使用方便,但当内存中的二进制文件与磁盘中的文本文件之间频繁交换数据时,比较费时。此时,可改用fread函数和fwrite函数以二进制方式对文件进行读写(数据块),数据可在内存与磁盘文件之间“原封不动、无需转换”地进行交换,效率高。例如:

inta[10];fread(a,4,10,fp);//从fp指向的文件中读取10个4字节的数据,存入数组a中8.3顺序读写数据文件

8.3.4用二进制方式对文件读写一组数据

structStudent { charname[10];//姓名

intstu_ID;//学号

intage;//年龄

}stu[10];

从磁盘文件中读取10名学生的数据,存入内存结构体数组:

for(i=0;i<10;i++) fread(&stu[i],sizeof(structStudent),1,fp);

将内存中10名学生的数据写入磁盘文件:

for(i=0;i<10;i++)

fwrite(&stu[i],sizeof(structStudent),1,fp);8.3顺序读写数据文件

【例8.5】从键盘输入5名学生的相关数据,然后将它们转存到磁盘文件中,最后再读取磁盘文件中的数据,并送显示屏显示。8.3.4用二进制方式对文件读写一组数据8.4随机读写数据文件

复习:顺序读写数据文件的方法:(1)用fgetc和fputc函数对文件读写一个字符;(2)用fgets和fputs函数对文件读写一个字符串;(3)用fscanf和fprintf函数对文件格式化读写;(4)用fread和fwrite函数对文件读写一组数据(二进制方式)

顺序读写是从文件的开头逐个字符进行读写,因此若随机查找文件中的第i个数据,顺序读写效率会很低。此时,可改用随机读写,以提高访问效率。8.4.1文件位置指示器及其定位8.4随机读写数据文件

1、文件位置指示器——用来指示当前读写的位置

顺序读写时,文件位置指示器开始指向文件开头,每读写一个字符,文件位置指示器自动移动到下一个字符的位置:

可根据需要,人为地将文件位置指示器移动到文件的任意位置,从而实现随机读写。8.4随机读写数据文件

2、文件位置指示器的定位8.4.1文件位置指示器及其定位3个函数:rewind函数使位置指示器返回到文件头、ftell函数获取位置指示器当前位置、fseek函数改变当前文件位置。

fseek(fp,10L,0);例如:i=ftell(fp);

//获取文件位置指示器的当前位置if(i==-1L)printf("文件位置读取出错");//出错

//将文件位置指示器移到离当前位置10个字节处//将文件位置指示器从文件尾向后退10个字节//将文件位置指示器移到离文件头10个字节处fseek(fp,10L,1);fseek(fp,-10L,2);8.4.2随机读写文件8.4随机读写数据文件

【例8.6】从键盘输入5名学生的相关数据,然后将它们转存到磁盘文件中去,最后随机查询磁盘文件中的某名学生的信息,并送显示屏显示。8.4随机读写数据文件

8.4.2随机读写文件【例8.6】从键盘输入5名学生的相关数据,然后将它们转存到磁盘文件中,最后随机查询磁盘文件中的某名学生的信息,并送显示屏显示。8.5文件读写的出错检测

1、ferror函数

温馨提示

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

最新文档

评论

0/150

提交评论