第9章 文 件Word文档下载推荐.docx
《第9章 文 件Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第9章 文 件Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
intmain()
{FILE*fp;
//定义文件指针
if((fp=fopen("
fi.txt"
"
w"
))==NULL)//打开文件
{printf("
Fileopenerror!
\n"
);
exit(0);
}
fprintf(fp,"
%s"
HelloWorld!
"
//写文件
if(fclose(fp))//关闭文件
Cannotclosethefile!
\n"
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
longnum;
//学号
charstname[20];
//姓名
intscore;
//成绩
f.dat"
))==NULL)//打开文件
301101张山91\n301102陈启85\n301103王亮78
\n301104郑旦69\n301105郭敏80\n"
//将学生数据写到文件中
if(fclose(fp))//关闭文件注意:
”\“在程序中表示其后面的数据放在下一行。
if((fp=fopen("
r"
Fileopenerror!
while(!
feof(fp))
{fscanf(fp,"
%ld%s%d"
&
num,stname,&
score);
//fscanf函数是将数据读入
printf("
%ld%s%d\n"
num,stname,score);
//输出到屏幕上
};
if(fclose(fp))
Cannotclosethefile!
运行程序后,在你所建此程序的目录中,新建一个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内容在屏幕上显示出来。
{FILE*fp1,*fp2;
charc='
'
;
intscore,i=0;
if((fp1=fopen("
))==NULL)//打开已有的f.dat文件,要读出数据
if((fp2=fopen("
f2.dat"
))==NULL)//建立f2.dat文件,并打开它,要往里写数据
while(!
feof(fp1))//只要!
feof(fp1)为真,说明fp1指针还没有指向文件末尾
{c=fgetc(fp1);
//将文件的一个字符赋给c
fputc(c,fp2);
//将字符复制到f2.dat
if(fclose(fp1))//关闭f.dat
if(fclose(fp2))//关闭f2.dat
))==NULL)//打开f2.dat文件,要读出数据
do//将复制好的f2.dat文件内容再显示到屏幕上
{//fscanf函数是将f2.dat文件中的数据读入到变量中
fscanf(fp2,"
//将变量内容输出到屏幕上
i++;
}while(i<
5);
//这里一共有5行(0-4)输出,所以i<
5,而用while(!
feof(fp2))语句控制结束,程序结束不
//了,不知为什么?
可能最后找不到结束符标志,得需要程序给加上一个才行。
if(fclose(fp2))
}
运行该程序,观察源程序所在目录下是否产生了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的文件:
。
文