计算机计算机二级C语言程序设计 第12讲_第1页
计算机计算机二级C语言程序设计 第12讲_第2页
计算机计算机二级C语言程序设计 第12讲_第3页
计算机计算机二级C语言程序设计 第12讲_第4页
计算机计算机二级C语言程序设计 第12讲_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

第12讲文件

内容提要

•文件概述

■标,文件操作

文件概述

­文件是指存放在外存储器上的信息的集合

•数据文件的存储形式

⑴文本文件(ASCH文件)

•按数据的ASCH形式存储

(2)二进制文件

•按数据在内存中的二进制形式存储

上一页c=^l藤炉下一页

标准文件与非标准文件

利用缓冲区将对磁盘文件的频繁逐次访问变为批量访问的做法称为标准文件操

输出文件缓冲区

输入文件缓冲区

上一页方雷下一页

文件的存取方式

标准I/O提供了4种文件存取方法

(1)读写一个字符

'(2)读写一个字符串,符多个字符组成的字符串写入文件或从文件中读出。

(3)格式化读写,根据格式控制指定的数据格式对数据进行转换存取。

(4)成块读写,也称做按记录读写。

4种存取方式和C语言的对应的函数关系:

将多个字节作为一个数据块存取

freadfwrite

字符存取字符串存取格式存取

fgetcfgetsfputsfscanffprintf

fputc例如读取多个字节例如,将两个字节的数据10^>

作为整型数存取

上一页

标准文件FILE结构指针

・FILE类型

>保存被使用的文件的有关信息

>所有的文件操作都需要FILE类型的指针

>FILE是库文件中定义的结构体的别名

>注意不要写成structFILE

・举例

>FILE*fp;

上一页c=^l藤炉下一页

FILE类型

typedefstruct{

shortlevel;/*缓冲区满空程度*/

unsignedflags;/*文件状态标志*/

charfd;/*文件描述符*/

unsignedcharhold;/*无缓冲则不读取字符*/

shortbsize;/*缓冲区大小*/

unsignedchar"buffer;/*数据缓冲区*/

unsignedchar*curp;/*当刖位置指针*/

unsignedistemp;/*临时文件指不器*/

shorttoken;/*用于白效性检查*/

}FILE;

上一页方炉下一页

,产文件的打开(fopen函数)

•函数原型

FILE*fopen(char*filename,*mode);

•参数说明

>filename:要打开的文件路径

>mode:打开模式

•返回值

若成功,返回指向被打开文件的指针

若出错,返回空指针NULL(0)

上一页c=^l藤炉下一页

,产文件的打开模式

文件操作方式含义

什“(只读)为只读打Q个字符文件

"w"(只写)为只写打开一个字符文件,文件指针指

向文件首部

“a”(追加)打开字符文件,指向文件尾,在已存在

的文件中追加数据

“rb”(只读)为只读打?1—个一进制文件

"wb"(只写)为只与打开一个一进制文件

“ab“(追加)打开一进制文件,以向文件追加数据

“r+“(读写)以读与方式打Q个已存在的字符文件

“w+“(读写)为读写建立一个新的字符文件

“a+“(读写)为读与打开一个字符文件,进行追加

“rb+”(读写)为读与打Q个一进制文件

“wb+”(读写)为读写建立一个新的二进制文件

“ab+”(读写)为读写打开一个二进制文件进行追加

上一页c=^l藤炉下一页

文件的打开举例

FILE*fpl,*fp2;

/*以文本只读方式打开filei*/

if(!(fpl=fopen(〃filel〃,〃:r〃))){

printf(^CannotOpenThisFile!\n/z);

exit(0);/*退出程序*/

}

/*以二进制读写方式打开FILE2.TXT*/

fp2=fopen(Z,C:\\HOME\\FILE2.TXT",〃rb+〃);

上一页c=^l藤炉下一页

文件的关闭(fclose函数)

•函数原型

>intfclose(FILE*fp);

•参数说明

>fp:要关闭的文件指针

•返回值

>若成功,返回0

>若出错,返回EOF(T)

­不用的文件应关闭,防止数据破坏丢失

上一页c=^l藤炉下一页

文件的关闭举例

FILE*fp;

charfile[]='D:\\USER\\STUDENTS.DAT";

if(!(fp=fopen(file,〃rb+〃))){

printf(''Openfile%serror!\n,z,file);

exit(0);

}

fclose(fp);

上一页运1本炉下一页

读写操作⑴

•读写文件中字符的函数:

、》从磁盘文件读取字符的函数是fgetc(),形式为:

>intfgetc(FILE*stream);详细说明

>将一个字符写入磁盘文件的函数是fputcO,其形式为:

>intfputc(intch,FILE*stream);详细说明

>注:getc()和fgetc()功能相同,putc()和fputc()相同

•府用举例

上一页c=^l藤炉下一页

读写操作⑵

•读写文件中字符串的函数:

»从磁盘文件读取字符串的函数是fgets(),形式为:

>char*fgets(char*str,intn,FILE*stream)

>详细说明

»将一个字符串写入磁盘文件的函数是fputS(),其形式为:

>char*fputs(char*str,FILE*stream);

>详细说明

•巾用举例

上一页c=^l藤炉下一页

读写操作⑶

•格式化读写函数

>函数原型

•intfscanf(FILE*fp,char*format[,address,

•intfprintf(FILE*fp,char*format[,argument,...]);

>说明

•与printf和scanf函数类似

•从文件输入或输出到文件

■应用举例

上一页c=^l藤炉下一页

标准的随机读写(1)

•文件指针定位函数

:>文件位置指针

•位置指针指向当前读写的位置

•每次读写文件,位置指针都会相应移动

•可以通过相关函数强制修改位置指针

>相关函数

•rewind函数详细说明

•fseek函数详细说明

•ftell函数详细说明

上一页c=^l藤炉下一页

标准的随机读写(2)

•文件随机读写函数:fwriteffifread

>size_tfwrite(void*buffer,

sizetsize,

sizetcount,

FILE*fp);

>size_tfread(void*buffer,

size_tsize,

size_tcount,

FILE*fp);

>参数说明

■应用举例

上一页c=^l藤炉下一页

fgetc/getc函数

•函数原型

>intfgetc(FILE*fp);

>intgetc(FILE*fp);

•参数

>fp:文件指针

•返回值

>若成功,返回输入的字符

>若失败或文件结束,返回EOF

fputc/putc函数

•函数原型

>intfputc(intc,FILE*fp);

>intputc(intc,FILE*fp);

•参数

>c:要输出到文件的字符

>fp:文件指针

•返回值

>若成功,返回输出的字符

>若失败或文件结束,返回EOF

1D^>

读写文件中字符的函数

voidmain()

{

FILE*fp;/*定义FILE结构指针变量*/

charch;

if((fp=fopen(〃datal.txt〃,〃r〃))==NULL)/*打开并测试文件

*/

(

printf(〃filecannotbeopened\n);

exit(1);/*若文件打开不成功,退出*/

while((ch二fgetc(fp))!二EOF)/*读文件并测试是否文件尾*/

fputc(ch,stdout);/*输出到标)隹设备文件(显示器)显示*/

fclose(fp);A关闭文件*/

fgets函数

•函数原型

>char*fgets(char*s,intn,FILE*fp);

•返回值,

>若成功,返回s首地址;若失败,返回NULL

•说明

>从fp输入字符串到s中

>输入n-1个字符,或遇到换行符或EOF为止

>读完后自动在字符串末尾添加''0'

fputs函数

•函数原型

>intfputs(char*s,FILE*fp);

•返回值

>若成功,返回输出字符个数(或最后的字符)

>若失败,返回EOF

•说明

>字符串的结束标志''0'不会输出到文件

>也不会在字符串末尾自动添加换行符

读写文件中字符串的函数

ttinclude<stdio.h>

voidmain()

{FILE*fp2;

charbuffer[64];

if((fp2=fopen(〃data2.txt〃,〃r〃))=NULL)/*以只读方式打开文件,

且测试*/

(

printf(〃can'topenfile\n〃);

exit⑴;/*打开不成功退出*/

)

while(!feof(fp2))/*测试文件是否结束*/

(

if(fgets(buffer,64,fp2)!=NULL)/*读一行字符并测试是否为空*/

printf(〃%s〃,buffer);/*显示该行字符*/

fclose(fp2);/*关闭文件*/

格式化读写函数

/*2007-4*/

^include<stdio.h>

main()

{FILE*fp;intk,n,a[6]={1,2,3,4,5,6};

fp二fopen(〃d2.dat〃,〃w〃);

fprintf(fp,〃%d%d%d\n〃,a[0],a[l],a[2]);

fprintf(fp,〃%d%d%d\n〃,a[3],a[4],a[5]);

fclose(fp);

fp二fopen(〃d2.dat〃,〃r〃);

fscanf(fp,〃%d%d〃,&k,&n);

输出结果:

printf(〃%d%d\n〃,k,n);

123456

fclose(fp);

rewind函数

•函数原型

>voidrewind(FILE*fp);

•参数

>fp:文件指针

•功能

>使文件位置指针重新返回文件开头

fseek函数(1)

­函数原型

>intfseek(FILE*fp,longoffset,intwhence);

•参数

>fp:文件指针

>offset:偏移量

>whence:起始位置

•功能

>随机改变文件的位置指针

fseek函数(2)

•起始位置

'>SEEK_SET(0):文件开始

>SEEK_CUR(1):文件当前位置

>SEEK_END(2):文件末尾

・举例

>fseek(fp,100L,SEEK„SET);

>fseek(fp,-10L,SEEK_CUR);

>fseek(fp,-20L,SEEK_END);

ftell函数

•函数原型

>longftell(FILE*fp);

•参数

>fp:文件指针

•返回值

>若成功,返回当前文件指针位置

>若出错,返回TL

1D^>

£01'五0和"6@(1函数说明

•参数

:>buffer:要读/写的数据块地址

>size:要读/写的每个数据项的字节数

>count:要读/写的数据项数量

>fp:文件指针

•返回值

>若成功,返回实际读/写的数据项数量

>若失败,一般返回0

文件随机读写函数

/*2006-9*/

#include<stdio.h>

main()

{FILE*fp;inti;

charch口二〃abcd〃,t;

fp=fopen(〃abc.dat〃,〃wb+〃);

for(i=0;i<4;i++)fwrite(&ch[i],1,1,fp);

fseek(fp,-2L,SEEK__END);

fread(&t,1,1,fp);

fclose(fp);

printf(“%c\n",t);/*输出

c

2007年4月

设有定义:FILE*fw;,请将以下打开文件的语句补充完整,以便可以向文本文件

readme,txt的最后续写内容。

fw=fopen("readme,txt”,)

〃〃

a

上一页c=^l藤炉下一页

2007年4月

粼一

有以下程序

#include<stdio.h>

main()

{FILE*fp;inti,a[6]={l,2,3,4,5,6};

fp二fopen("d3.dat“,“wb+”);

fwrite(a,sizeof(int),6,fp);

fseek(fp,sizeof(int)*3,SEEK_SET);/*该语句使读文件的位置指针从文件

头向后移动3个int型数据*/

fread(a,sizeof(int),3,fp);fclose(fp);

for(i=0;i<6;i++)printf(a%d,",a[i]);

)

程序运行后的输出结果是()

A)4,5,6,4,5,6,B)1,2,3,4,5,6,

C)4,5,6,1,2,3,D)6,5,4,3,2,1,

上一页c=^l藤炉下一页

2007年9月

1、读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);,其

中buffer代表的是

A)一个文件指针,指向待读取的文件

B)一个整型变量,代表待读取的数据的字节数

O一个内存块的首地址,代表读入数据存放的地址

D)一个内存块的字节数

上一页c=^l藤炉下一页

2007年9月

2、有以下程序

#include<stdio.h>

main()

{FILE*fp;inta[10]={l,2,3,0,0},i;

fp=fopen(/zd2.dat,〃wb〃);

fwrite(a,sizeof(int),5,fp);fwrite(a,sizeof(int),5,fp);

fclose(fp);

fp=fopen(〃d2.dat〃,〃rb〃);

fread(a,sizeof(int),10,fp);

fclose(fp);

for(i=0;i<10;i++)printf(〃%d〃,a);

)

程序的运行结果是

A)1,2,3,0,0,0,0,0,0,0,B)1,2,3,1,2,3,0,0,0,0,

0123,0,0,0,0,123,0,0,0,0,D)1,2,3,0,0,1,2,3,0,0,

上一页c=^l藤炉下一页

2008年4月

1、以下叙述中错误的是

A)gets函数用于从终端读入字符串

B)getchar函数用于从磁盘文件读入字符

0fputs函数用于把字符串输出到文件

D)fwrite函数用于以二进制形式输出数据到文件

上一页c=^l藤炉下一页

2008年4月

2、有以下程序

#include<stdio.h>

main()

{FILE*fp;inta[10]={l,2,3),i,n;

fp二fopen(〃dl.dat〃,“w〃);

for(i=0;i<3;i++)fprintf(fp,〃%d〃,a[i]);

fprintf(fp,〃\n〃);fclose(fp);

fp二fopen(〃dl.dat〃,〃r〃);

fscanf(fp,〃%d〃,&n);

fclose(fp);printf(〃%d\n〃,n);

)

程序的运行结果是

A)12300B)123C)1D)321

上一页下一页

2008年4月

3、以下程序从名为filea.dat的文本文件中逐个读入字符并显示在屏幕上。请填

工CA?。

#include<stdio.h>

main()

{FILE*fp;charch;

fp=fopen([15J);

ch=fgetc(fp);

while(!feof(fp)){putchar(ch);ch=fgetc(fp);}

putcharC\n,);fclose(fp);

〃f「i・l1ea.d1at」〃,〃r〃

上一页下一页

2008年9月

1、有以下程序

温馨提示

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

评论

0/150

提交评论