内容正文:
<<C语言程序设计>> 课程
第10章 文件操作
Page 1
<<C语言程序设计>>
主要内容
文件操作概述
文件的打开与关闭
文件打开函数fopen() (重点)
文件关闭函数fclose() (重点)
文件读写操作
字符读写函数fputc()和fgetc() (难点)
文件格式化读写fprintf()和fscanf() (难点)
综合应用案例
Page 1
<<C语言程序设计>>
实际应用中,有时需要把程序处理的数据结果保存成文件,以备将来使用;或者程序处理的原始数据是从某个文件中读取出来的。所以,如何实现数据的长期保存又能实现数据共享是程序设计的又一重要内容,其实质就是对文件的读写操作。
对文件的读写操作过程,如同读一本书或写一本书一样,文件操作的流程是什么?
问题引入
第一步:打开书本
读书/写书
第二步:读书中文字
或者在书上写文字
第三步:合上书本
读写文件
第一步:打开文件
第二步:读取文件中的数据
或者向文件中写数据
第三步:关闭文件
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
Page 1
<<C语言程序设计>>
10 文件操作
10.1 文件操作概述
10.2文件的打开与关闭——fopen()与fclose()
10.3 文件读写操作
10.4 综合案例
Page 1
<<C语言程序设计>>
10.1文件操作概述
C语言通过系统提供的结构类型FILE定义的指针变量来访问文件。结构类型FILE已在头文件“stdio.h”中定义了,所以在对文件进行操作时,用FILE直接定义文件指针变量即可。
10.1 文件操作概述
读书用“眼睛”,写书用“笔”,文件的读写用什么呢?
Page 1
<<C语言程序设计>>
10.1文件操作概述
定义形式为:
FILE *文件指针变量名;
FILE必须大写,*表示定义的变量是指针类型。
例:
FILE *fp;
定义fp文件指针变量,当读文件时,fp就相当于“眼睛”,当写文件时,fp就相当于“笔”。文件有结束标志EOF
10.1 文件操作概述
Page 1
<<C语言程序设计>>
定义文件指针变量之后,就可以对文件进行操作了。C语言提供了大量的库函数来操作文件。
fopen(文件名,打开方式);
第一步:打开文件
第二步:读取文件中的数据
或者向文件中写数据
第三步:关闭文件
字符读写:fgetc();fputc();
格式读写:fscanf();fprintf();
Fclose(文件指针变量);
10.1文件操作概述
10.1 文件操作概述
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
Page 1
<<C语言程序设计>>
10.2 fopen()与fclose()
10.2文件的打开与关闭—fopen()与fclose()
定义文件指针变量之后,就可以对文件进行操作了。C语言提供了大量的库函数来操作文件。
fopen(文件名,打开方式);
第一步:打开文件
第二步:读取文件中的数据
或者向文件中写数据
第三步:关闭文件
字符读写:fgetc();fputc();
格式读写:fscanf();fprintf();
Fclose(文件指针变量);
Page 1
<<C语言程序设计>>
打开文件fopen
函数原型: FILE *fopen(文件名,打开方式)
功能:按指定方式打开文件
返回值:正常打开,为指向文件结构体的指针;打开失败,为NULL
要打开的文件名,含路径
打开方式-读/写
例 FILE *fp;
fp= fopen (“c:\\fengyi\\bkc\\test.dat”,”r”);
例 FILE *fp;
char *filename=“c:\\fengyi\\bkc\\test.dat”
fp= fopen(filename,”r”);
“r+/rb+” (读写)
“a/ab” (追加)
“w/wb” (只写)
“r/rb” (只读)
“w+/wb+” (读写)
“a+/ab+” (读写)
为输入打开一个文本/二进制文件
为输出打开或建立一个文本/二进制文件
为读/写打开一个文本/二进制文件
为读/写建立一个文本/二进制文件
为读/写打开或建立一个文本/二进制文件
向文本/二进制文件尾追加数据
文件使用方式
含义
10.2 fopen()与fclose()
10.2文件的打开与关闭—fopen()与fclose()
Page 1
<<C语言程序设计>>
#include <stdio.h>
void main( )
{FILE *fp; //定义文件指针fp fp=fopen(“test.dat”,“r”); //只读方式打开test.dat文件
if(fp==NULL) //判断文件是否打开成功,并输出状态信息
puts("文件打开失败.");
else
printf("文件打开成功.");
fclose(fp); //关闭打开的文件
}
10.2 fopen()与fclose()
10.2文件的打开与关闭—fopen()与fclose()
【例10-2】打开当前目录中的test.dat文件,判断并输出文件打开状态信息,然后关闭文件。
文件名
只读打开
运行结果:
Page 1
<<C语言程序设计>>
1.定义一个文件指针fpin,指向以只读方式打开的文本文件“d:\test\in.dat”。
2.定义一个文件指针fpout,指向以只写方式打开的文本文件“d:\test\out.dat”。
【随堂练习10-1】
10.2文件的打开与关闭—fopen()与fclose()
【提示与思考】
1.文件指针变量定义
2.文件的打开
3.文件的关闭
Page 1
<<C语言程序设计>>
10.3 文件读写操作
10.3.1 10.3.1字符读写——fputc()和fgetc()
10.3.2 文件格式化读写——fprintf()和fscanf()
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
Page 1
<<C语言程序设计>>
1.字符写函数fputc( )
功能是将字符写入文件中
例:
fputc(‘c’,fp);
#include <stdio.h>
void main( )
{ char ch;
FILE *fp; //定义文件指针
fp=fopen("test.dat","w");
while((ch=getchar())!='
')
//循环输入字符
fputc(ch,fp);
//将字符ch写入fp指向的文件
fclose(fp);
}
将字符’c’写入fp指向的文件中
【例10-4】从键盘输入一行字符,将输入的字符输出到test.dat文件中保存
10.3.1 字符读写fputc()和fgetc()
10.3 文件读写操作
程序
演示
Page 1
<<C语言程序设计>>
2. 字符读函数fgetc( )
功能是从文件中读取一个字符
例:
fgetc(fp);
#include <stdio.h>
void main( )
{ char ch;
FILE *fp; //定义文件指针
fp=fopen("test.dat","r");
ch=fgetc(fp);
while(ch!=EOF) //是否访问到文件尾
{ putchar(ch);
ch=fgetc(fp); //fp从文件中
读取字符,并赋值给ch
}
fclose(fp); }
从fp指向的文件中读取一个字符
【例10-6】下面程序读取上例中产生的test.dat文件,并将读出结果显示在屏幕上
10.3.1 字符读写fputc()和fgetc()
10.3 文件读写操作
程序
演示
Page 1
<<C语言程序设计>>
1. 格式化写入数据函数fprintf( )
功能按照指定的格式把数据写入文件中
【例10-7】
(1)fprintf(fp,”%d,%d”,10,20); //将10和20以整型数据写入fp指向的文件中
(2)fprintf(fp,”%lf”,n); //将变量n的值以双精度浮点型数据写入fp指向的文件中
(3)fprintf(fp,”%s”,”How are you.”); //将字符串”How are you.”写入fp指向文件中
10.3.2 文件格式化读写—fprintf()和fscanf()
10.3 文件读写操作
1.指向文件的指针
2.写入数据的格式控制字符串
3.写入文件的数据
格式化写入数据函数fprintf( )有三个参数
Page 1
<<C语言程序设计>>
【例10-8】把从键盘输入的10个整数写入in.dat文件中保存。
#include <stdio.h>
#include <stdlib.h>
void main()
{ FILE *fp; int n;
fp=fopen(“in.dat”, “w”); //打开文件
if(fp== NULL)
{ printf("打开文件失败.
");
exit(0); //退出 }
for(int i=0;i<10;i++)
{ scanf(“%d”,&n); //输入一个整型数据
fprintf(fp,"%4d",n); //将输入的n值写入文件 }
fclose(fp);}
程序
演示
10.3.2 文件格式化读写—fprintf()和fscanf()
10.3 文件读写操作
Page 1
<<C语言程序设计>>
2. 格式化读取数据函数fscanf( )
功能从文件中按指定格式读取数据
【例10-9】
(1)fscanf(fp,”%d%d”,&a,&b); //从 fp指向的文件中读取两个整数存入变量a和b的
内存单元
(2)fscanf(fp,”%lf”,&n); //从 fp指向的文件中读取一个double类型数据存入变量n的
内存单元
(3)fscanf(fp,”%s”,str); //从 fp指向的文件中读取一个字符串,存入str指向的内存
10.3.2 文件格式化读写—fprintf()和fscanf()
10.3 文件读写操作
1.指向文件的指针
2.读取数据的格式控制
3.读取数据的格式控制
格式化读取数据函数fscanf( )有三个参数
Page 1
<<C语言程序设计>>
【例10-10】从【例10-8】得到的in.dat文件中读取10个整数显示输出
#include <stdio.h>
#include <stdlib.h>
void main()
{ FILE *fp;
int i,a[10];
fp=fopen("in.dat", "r"); //打开文件
if(fp== NULL)
{ printf("打开文件失败.
");
exit(0); //退出 }
for(i=0;i<10;i++) //从文件中读取整型数据
fscanf(fp,"%d",&a[i]);
printf("读取的数据为:
");
for(i=0;i<10;i++)
printf("%3d",a[i]); //显示输出数据
fclose(fp);}
程序
演示
10.3.2 文件格式化读写—fprintf()和fscanf()
10.3 文件读写操作
Page 1
<<C语言程序设计>>
10.4 综合应用案例
#include <stdio.h>
#include <stdlib.h>
void main()
{ FILE *fpr, *fpw; //分别指向源文件和目的文件
char sfile[10],dfile[10]; //分别存放源/目的文件名
char ch;
int i=0; //复制字节计数器
printf("请输入源文件名:"); //输入源文件名
gets(sfile);
fpr=fopen(sfile, "r"); //打开源文件
if(fpr== NULL)
{ printf("打开源文件失败.
");
exit(0); //退出
}
运行结果:
【例10-11】利用fputc()和fgetc()函数将文件test.dat复制为test.bak。
10.4 综合应用案例
printf("请输入目的文件名:"); //输入目的文件名
gets(dfile);
fpw=fopen(dfile, "w"); //打开目的文件
if(fpw== NULL)
{ printf("打开目标文件失败.
");
exit(0);
}
while(!feof(fpr)) //执行复制并计数
{ ch=fgetc(fpr);
fputc(ch,fpw);
i++;
}
printf("文件复制完成,共复制%d个字节.
",i);
fclose(fpr); //关闭文件
fclose(fpw);
}
Page 1
<<C语言程序设计>>
课程小结:我们学习了什么?
文件操作概述
文件打开—文件操作—文件关闭
文件的打开与关闭
fopen()
fclose()
文件读写操作
字符读写——fputc()和fgetc()
文件格式化读写——fprintf()和fscanf()
Page 1
<<C语言程序设计>>
<<C语言程序设计>>
Page 1
<<C语言程序设计>>
$$