第十三章 文 件
13.1 C文件概述
1.文件:存储在外部介质上的数据的集合。
2.ASCII码文件(文本文件):
每个字符以ASCII码形势存储。
3.二进制文件按数据的二进制形式存储在磁盘上例如:10000是整型数据,用二进制表示占两个字节,如用ASCII码输出,则占五个字节。
10000
00100111 00010000
00110001 00110000 00110000 00110000 00110000
4.文件流:一连串的字节或字符,不考虑记录的界限。
13.2文件的打开与关闭
1.文件打开函数fopen(),入口参数文件名和调用方式例:FILE *fp; //说明一个文件类指针.
fp=fopen("myfile.dat","r");?
文件使用方式
含义
“r”(只读)
为输入打开一个文本文件
“w”(只写)
为输出打开一个文本文件
“a”(追加)
向文本文件末尾增加数据
“rb”(只读)
为输入打开一个二进制文件
“wb”(只写)
为输出打开一个二进制文件
“ab”(追加)
向二进制文件末尾增加数据
“r+”(读写)
为读/写打开一个文本文件
“w+”(读写)
为读/写建立一个新的文本文件
“a+”(读写)
为读/写打开一个文本文件
“rb+”(读写)
为读/写打开一个二进制文件
“wb+”(读写)
读/写建立一个新的二进制文件
“ab+”(读写)
为读/写打开一个二进制文件
2关闭文件函数 fclose
使用完文件后应当关闭它,系统把缓冲区的内容写回文件,然后将文件指针变量与该文件“脱钩”。
关闭文件使用函数fclose,它的原型为
int fclose(FILE *fp);
该函数关闭fp指向的文件。如果文件正常关闭将返回0值;如果关闭文件失败则返回非0值。
13.3文件的读写一.向文件中写数据
1.fputc( )函数.
fputc的原型为
int fputc(int ch,FILE *fp);
此函数会将字符ch写入fp指向的文件。
若操作成功则返回ch的值;
若操作失败则返回EOF(-1)。
通常用于将一个字符写入一个文本文件。
[例13.1] 从键盘上送入一些字符,存到磁盘中,“#”为结束符。
#include,stdio.h”
main()
{ FILE *fp; char ch,filename[10];
scanf(“%s”,filename);
if ((fp=fopen(filename,”w”))==null)
{ printf(“can not open file\n”);
exit(0);
}
ch=getchar();
while(ch!=’#’) {
fputc(ch,fp); ch=getchar(); }
fclose(fp);
}
2,fwrite函数函数原型:
unsigned fwrite(void *buffer,unsigned size, unsigned count,FILE *fp);
功能:将buffer所指向的内存单元开始的内存区中的每项长度为size字节的count个数据项写到fp指向的文件中。
此函数主要用于二进制文件的写操作,可以将一个数组的数据写入文件中。
例13.2
建立一个二进制文件score.dat,存放某班32名同学某门课的成(每名同学要求有学号和成绩两个数据项。
#include <stdio.h>
struct struct_name
{
int number;
int score;
}students[32];
main()
{
FILE *fp;
int i;
if((fp=fopen("score.dat","wb"))==NULL)
{
printf("Cannot open file score.dat!\n");
exit(0);
}
for(i=0;i<32;i++)
scanf("%d%d",&students[i].number,&students[i].score);
for(i=0;i<32;i++)
fwrite(&students[i],sizeof(struct struct_name),1,fp);
fclose(fp);
}
第二个for循环也可以用以下语句实现:
fwrite(students,sizeof(struct struct_name),32,fp);
二.从文件中读取数据
1,fgetc函数
fgetc的原型为
int fgetc(FILE *fp);
功能:
从文件的当前位置读出一个字符将位置指针下移一个字符若读取成功则返回所读的字符;若发生错误或文件结束则返回EOF(-1)。
2,fread函数
fread的原型为
unsigned fread(void *buffer,unsigned size; unsigned count,FILE *fp);
功能:从文件中读取每项长度为size字节的count个数据项,存到buffer所指向的内存单元开始的内存区中。