第9章 文 件.docx

上传人:b****2 文档编号:2067230 上传时间:2022-10-26 格式:DOCX 页数:22 大小:54KB
下载 相关 举报
第9章 文 件.docx_第1页
第1页 / 共22页
第9章 文 件.docx_第2页
第2页 / 共22页
第9章 文 件.docx_第3页
第3页 / 共22页
第9章 文 件.docx_第4页
第4页 / 共22页
第9章 文 件.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

第9章 文 件.docx

《第9章 文 件.docx》由会员分享,可在线阅读,更多相关《第9章 文 件.docx(22页珍藏版)》请在冰豆网上搜索。

第9章 文 件.docx

第9章文件

第9章文件

一、文件

许多程序在实现过程中,依赖于把数据保存到变量中,而变量是通过内存单元存储数据的,数据的处理完全由程序控制。

当一个程序运行完成或终止运行,所有变量的值不再保存。

另外,一般的程序都会有数据输入与输出,如果输入/输出数据量不大,通过键盘和显示器即可方便解决。

当输入/输出数据量较大时,就会受到限制,带来不便。

文件是解决上述问题的有效办法,它通过把数据存储在磁盘文件中,得以长久保存。

当有大量数据输入时,可通过编辑工具事先建立输入数据的文件,程序运行时将不再从键盘输入,而从指定的文件上读入,从而实现数据一次输入多次使用。

同样,当有大量数据输出时,可以将其输出到指定文件,不受屏幕大小限制,并且任何时候都可以查看结果文件。

一个程序的运算结果还可以作为另外程序的输入,进行进一步加工。

例如:

例1将短句”HelloWorld!

“写入磁盘文件

#include

#include

intmain()

{FILE*fp;//定义文件指针

if((fp=fopen("fi.txt","w"))==NULL)//打开文件

{printf("Fileopenerror!

\n");

exit(0);

}

fprintf(fp,"%s","HelloWorld!

");//写文件

if(fclose(fp))//关闭文件

{printf("Cannotclosethefile!

\n");

exit(0);

}

return0;

}

运行程序后,在你所建此程序的目录中,新建一个fi.txt文件,用记事本(或其它文本编辑工具)打开查看,其内容就是”HelloWorld!

“,如图9.1所示。

程序中的fopen()、fprintf()、fclose()是文件操作的函数,在stdio.h中定义。

exit语句是退出,在stdlib.h中定义。

 

 

图9.1查看fi.txt文件内容

例2将下列数据写入文件f.dat中,并再将其读出显示到屏幕上。

301101张山91

301102陈启85

301103王亮78

301104郑旦69

301105郭敏80

#include

#include

intmain()

{FILE*fp;//定义文件指针

longnum;//学号

charstname[20];//姓名

intscore;//成绩

if((fp=fopen("f.dat","w"))==NULL)//打开文件

{printf("Fileopenerror!

\n");

exit(0);

}

fprintf(fp,"%s","301101张山91\n301102陈启85\n301103王亮78

\n301104郑旦69\n301105郭敏80\n");//将学生数据写到文件中

if(fclose(fp))//关闭文件注意:

”\“在程序中表示其后面的数据放在下一行。

{printf("Cannotclosethefile!

\n");

exit(0);

}

if((fp=fopen("f.dat","r"))==NULL)//打开文件

{printf("Fileopenerror!

\n");

exit(0);

}

while(!

feof(fp))

{fscanf(fp,"%ld%s%d",&num,stname,&score);//fscanf函数是将数据读入

printf("%ld%s%d\n",num,stname,score);//输出到屏幕上

};

if(fclose(fp))

{printf("Cannotclosethefile!

\n");

exit(0);

}

return0;

}

运行程序后,在你所建此程序的目录中,新建一个f.dat文件。

双击这个文件出现一个小对话框,在小对话框上点击“打开方式”,又出现一个对话框,选择“从列表中选择程序”,点击“确定”,出现“打开方式”对话框,从中选择“记事本”双击,便在屏幕上显示出该文件的信息。

如图9.2所示。

 

图9.2读取学生成绩文件的内容

程序中调用fscanf()函数,将文件中的数据读入到变量num、stname和score,并通过printf()函数把结果输出到屏幕。

在C语言中,文件最基本的操作有两个:

从磁盘文件中读取信息(读操作)和把信息放到磁盘文件中(写操作)。

为了实现读写操作,首先要定义文件指针,并确定被操作文件的具体文件名,请求系统分配文件缓冲区单元,然后进行文件读写,文件操作完成后关闭文件。

在文件操作中,先定义指向文件的指针,然后通过调用专门的函数来实现文件的所有操作。

下面先介绍文件的打开、关闭、读、写。

1、打开文件

打开文件由标准函数fopen()实现,其一般调用形式为:

Fopen(“文件名“,“文件打开方式”);

说明:

a、该函数有返回值,如果执行成功,函数将返回包含文件缓冲区等信息的FILE结构体地址,赋给文件指针fp。

否则,返回一个NULL(空值)的FILE指针。

b、括号内包括两个参数:

“文件名”和“文件打开方式”。

两个参数都是字符串。

“文件名”指出要对哪个具体文件进行操作,一般要指定文件的路径,如果不写出路径名,则默认与本程序的当前路径相同。

文件打开方式用来确定对所打开的文件将进行是么操作。

表9.1列出了C语言所有的文件打开方式。

从表9.1可知,比如用”r“表示打开一个文本文件并进行读数据操作,”w“表示建立一个新的文本文件,并向该文件进行写数据操作。

二进制文件操作与文本文件操作一样,只不过打开方式的表示多加了个字符”b“做后缀。

表9.1文件打开方式

文本文件(ASCCI)二进制文件

使用方式含义使用方式含义

“r“打开文本文件进行只读“rb“打开二进制文件进行只读

“w“建立新文本文件进行只写“wb“建立二进制文件进行只写

“a”打开文本文件进行追加“ab“打开二进制文件进行写\追加

“r+“打开文本文件进行读/写“rb+“打开二进制进行读/写

“w+“建立新文本文件进行读/写“wb+“建立二进制新文件进行读/写

“a+“打开文本文件进行读/写追加“ab+“打开二进制文件进行读/写/追加

下面两种方法都以读的方式打开abc.txt文件:

fp=fopen(“abc.txt“,”r“);//用字符串常量表示文件

char*p=“abc.txt“;//用字符指针表示文件

fp=fopen(p,”r”);

2、关闭文件

当文件操作完后,应及时关闭它,以防止不正常的操作。

关闭文件通过调用标准函数fclose()实现,其一般格式为:

fclose(文件指针);

该函数将返回一个整数,若该数为0表示正常关闭文件,否则表示无法正常关闭文件,所以关闭文件也应使用条件判断:

if(fclose(fp))

{

printf(“Cannotclosethefile!

\n”);

exit(0);

}

要养成文件使用结束后及时关闭的习惯,一则确保数据完整写入文件,二则及时释放不用的文件缓冲区单元。

3、文件复制

例3已知一个文本数据文件f.dat(例2中建好的文件),请将该文件复制一份,保存到文件f2.dat中,并将f2.dat内容在屏幕上显示出来。

#include

#include

intmain()

{FILE*fp1,*fp2;//定义文件指针

charc='';

longnum;//学号

charstname[20];//姓名

intscore,i=0;//成绩

if((fp1=fopen("f.dat","r"))==NULL)//打开已有的f.dat文件,要读出数据

{printf("Fileopenerror!

\n");

exit(0);

}

if((fp2=fopen("f2.dat","w"))==NULL)//建立f2.dat文件,并打开它,要往里写数据

{printf("Fileopenerror!

\n");

exit(0);

}

while(!

feof(fp1))//只要!

feof(fp1)为真,说明fp1指针还没有指向文件末尾

{c=fgetc(fp1);//将文件的一个字符赋给c

fputc(c,fp2);//将字符复制到f2.dat

}

if(fclose(fp1))//关闭f.dat

{printf("Cannotclosethefile!

\n");

exit(0);

}

if(fclose(fp2))//关闭f2.dat

{printf("Cannotclosethefile!

\n");

exit(0);

}

if((fp2=fopen("f2.dat","r"))==NULL)//打开f2.dat文件,要读出数据

{printf("Fileopenerror!

\n");

exit(0);

}

do//将复制好的f2.dat文件内容再显示到屏幕上

{//fscanf函数是将f2.dat文件中的数据读入到变量中

fscanf(fp2,"%ld%s%d",&num,stname,&score);

printf("%ld%s%d\n",num,stname,score);//将变量内容输出到屏幕上

i++;

}while(i<5);

//这里一共有5行(0-4)输出,所以i<5,而用while(!

feof(fp2))语句控制结束,程序结束不

//了,不知为什么?

可能最后找不到结束符标志,得需要程序给加上一个才行。

if(fclose(fp2))

{printf("Cannotclosethefile!

\n");

exit(0);

}

return0;

}

运行该程序,观察源程序所在目录下是否产生了f2.dat文件,用记事本打开它,可以看到它与f.dat的内容完全相同。

本程序实现了复制文件功能,涉及对两个文件的操作,所以程序定义了两个FILE结构类型的指针,并分别打开了文件f.dat和f2.dat。

在while循环中,只要!

feof(fp1)为真,说明fp1指针还没有指向文件末尾,就反复从文件f.dat中读入字符,并将该字符写入文件f2.dat。

最终把f.dat文件中的字符逐一读出并写入到文件f2.dat,完成文件赋值。

最后分别调用fclose()函数关闭指针fp1和fp2,结束文件操作。

在C语言中,scanf()和printf()函数是针对键盘输入和屏幕输出的标准函数。

C语言为文件的读写操作也定义了一系列标准函数,它们都在”stdio.h“中说明,因此文件操作需要包含有标准I/O的文件:

#include

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1