1.什么是文件
(1)程序文件。包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)等。这种文件的内容是程序代码。
(2)数据文件。文件的内容不是程序,而是供程序运行时读写的数据,如在程序运行过程中输出到磁盘或其他外部设备的数据,或在程序运行过程中供读入的数据。如一批学生的成绩数据 、货物交易的数据等。
特点:
1.文件是用于数据存储的单位。
2.文件通常用来长期存储数据。
3.文件中的数据是以字节为单位进行顺序存储的。
2.文件指针
缓冲文件系统中,关键的概念是“文件类型指针”,简称文件指针。每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息,这些信息保存在一个结构体变量中。
typedef struct{
short level; //缓冲区“满”或“空”的程度
unsigned flags; //文件状态标志
char fd; //文件描述符
unsigned char hold; //如无缓冲区则不读取字符
short bsize; //缓冲区的大小
unsigned char *baffer; //数据缓冲区的读写位置
unsigned char *curp; //指针指向的当前文件的读写位置
unsigned istemp; //临时文件,指示器
short token; //用于有效性检查
}FILE;
通过文件指针变量能找到与它相关联的文件。如果有n个文件,应设n个指针变量,分别指向n个FILE类型变量,以实现对n个文件的访问。
3.打开与关闭文件
文件使用方式 意义
“r” 只读打开一个文本文件,只允许读数据
“w” 只写打开或建立一个文本文件,只允许写数据
“a” 追加打开一个文本文件,并在文件末尾写数据
“rb” 只读打开一个二进制文件,只允许读数据
“wb” 只写打开或建立一个二进制文件,只允许写数据
“ab” 追加打开一个二进制文件,并在文件末尾写数据
“r+” 读写打开一个文本文件,允许读和写
“w+” 读写打开或建立一个文本文件,允许读和写
“a+” 读写打开一个文本文件,允许读,或在文件末追加数据
“rb+” 读写打开一个二进制文件,允许读和写
“wb+” 读写打开或建立一个二进制文件,允许读和写
“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据
(1)用fopen函数打开数据文件
调用方式:fopen(文件名,使用文件方式);
fopen("a1","r");
FILE *fp; //定义一个指向文件的指针变量fp
fp=fopen("a1", "r"); //用fopen函数的返回值赋给指针变量fp
(2)用fclose函数关闭数据文件
关闭文件用fclose函数,fclose函数调用一般形式为
fclose(文件指针);
例如
fclose (fp);
3.顺序读写数据文件
fgetc函数
调用形式 fgetc(fp)
从fp指向的文件读入一个字符,读成功,带回所读的字符,失败则返回文件结束标志EOF(即-1)
fputc函数
调用形式 fputc(ch,fp)
把字符ch写到文件指针变量fp所指向的文件中,输出成功,返回值就是输出的字符,输出失败,则返回EOF(-1)
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp; //定义文件指针fp
char ch,filename[10];
printf("请输入所用的文件名:");
scanf("%s",filename); //输入文件名
if((fp=fopen(filename,"w"))==NULL)
{
printf("无法打开此文件\n");
exit(0);
}
ch=getchar();
printf("请输入一个准备存储到磁盘的字符串(以#结束):");
ch=getchar();
while(ch!='#') //当输入'#'时结束循环
{
fputc(ch,fp); //向磁盘文件输出第一个字符
putchar(ch); //将输出的字符显示在屏幕上
ch=getchar(); //再接收从键盘输入的一个字符
}
fclose(fp); //关闭文件
putchar(10);
return 0;
}
读写一个字符串的函数
fgets函数
调用形式 fgets(str,n,fp)
从fp指向的文件读入一个长度为n-1的字符串,存放到字符数组str中,读成功,返回地址str,失败则返回NULL
fputs函数
调用形式 fputs(str,fp)
把str所指向的字符串写到文件指针变量fp所指向的文件中,输出成功,返回0,输出失败,则返回非0值