文件是相关信息的集合
文字信息、声音信息、图形信息
文件的取名:主文件名.扩展名
文件的分类:(c 程序中)
A:文本文件
B:二进制文件(data)把结构体的信息写入的文件
c程序可以对文件进行操作
读操作:从文件里面把文件的内容读取出来,并输出到屏幕。
它不会改变文件的内容
写操作:把一些内容往文件里面写入。
它一定会改变文件的内容
c程序如何对文件操作的呢?
通过文件指针和一些函数对文件进行操作的
什么是文件指针?
这个指针它是用来存放文件的首地址,这个指针是专用来指向文件的。
文件指针定义的格式:
FILE *指针名;
Ex: FILE *fp; //定义了一个指针fp,这个指针以后只能指向文件,以后要把文件的首地址赋给该指针.
如何给文件指针赋值:一般是通过fopen函数来赋值
Fopen功能:
A:打开一个文件。
B:同时会返回打开的那个文件的首地址。
格式:fopen(“要打开的文件名”,”打开的方式”);
C:该函数实际上就是地址
说明:
1、打开方式是表明打开文件之后要读还是要写
2、打开方式有几种:
r:要打开文件之后要读文件 read 读文本文件
w:要打开文件之后要写文件 write, 用新数据覆盖以前的内容
a:要打开文件之后要追加文件 append,把新的数据加到末尾
如果打开方式中加了一个b就表示对二进制文件进行操作
rb:要打开二进制文件,进行读
wb:要打开二进制文件,进行写
ab:要打开二进制文件,进行追加
3、如果打开的文件名中含有路径,里面的\要用“\\”来表示
fp=fopen(“打开的文件名”,”打开方式”);
fopen(“c:\\chen\\my.txt”,”r”); //打开my.txt文件并进行读操作
关闭文件:
1、通过fopen函数能够打开一个文件,然后对文件操作
2、操作完成后,一定要关闭文件
3、格式:fclose(文件指针名);
程序代码的一般格式:
FILE *fp;
fp=fopen(“打开的文件名”,”打开方式”);把文件指针赋给具体文件
然后对文件进行操作
fclose(fp);
对文件进行操作:
1、fgetc函数:从fp指向的文件里面读出一个字符,r
格式:字符型变量=fgetc(fp); //fp是一个文件指针
文件一定要以读的方式来打开/
2、fputc函数:向fp指向的文件里面写入一个字符w
格式: fputc(要写入的字符,fp);
文件一定要以写的方式来打开
3、fgets函数:从fp指向的文件里面读出一个字符串
格式:fgets(str,n,fp)
Str:表示存放字符串的数组
n:表示读出字符串的格式,它会读出n-1个字符,还有一个给\0
fp:文件指针
4、fputs函数:把字符串写入到fp所指向的文件中去
格式:
Fputs(str,fp); //把str写入到fp里面去
5、专用于二进制文件操作的
A:fwrite函数:把一个结构体变量中的信息以变量的形式写入到指定文件里面去
格式:fwrite(&结构体变量名,sizeof(结构体类型),1,fp);
B:fread函数:从fp所指向文件中读出一条信息,存放在一个结构体变量中
格式:fread(&结构体变量名,sizeof(结构体类型),1,fp);
如何判断一个文件指针是否到了末尾
feof函数
格式:feof(fp); 如果返回0没有到末尾,返回1说明到了末尾
如何从一个文件中把所有的字符都读出来
#include”stdio.h”
void main()
{
FILE *fp;//还没有指向任何文件
Char ch;
//fp=fopen(“打开的文件名”,”打开方式”);
fp=fopen(“c:\\chen\\my.txt”,”r”);//以读的方式来打开一个文本文件,并让指针fp指向这个文件
while(!feof(fp))
{ //当文件没有读完时,就反复来读
ch=fgetc(fp);//表示从fp指向的文件中读出一个字符
printf(“%c”,ch);
}
fclose(fp);
}
Void main()
{
FILE *fp;
char ch[100];
//fp=fopen(“c:\\chen\\you.txt”,”w”);//覆盖前面的内容。以前的都没有了
fp=fopen(“c:\\chen\\you.txt”,”a”);//在以前内容后面添加
Printf(“请输入一个字符串”);
gets(ch);
ch=’A’;//现在希望让用户来输入一些字符,然后把用户的字符写入到文件
For(int i=0;ch[i];i++)
{
fputc(ch[i],fp);
}
fclose(fp);
}
void main()
{
FILE *fp;
Char str[100];
Fp=fopen(“c”\\chen\\My.txt”,”r”);//以读的方式打开文件
Fgets(str,5,fp);//从fp里面读取5-1个字符放在str中
Puts(str);
Fclose(fp);
}
void main()
{
FILE *fp;
char str[100]={“adjdwhdv12312”};
fp=fopen(“c”\\chen\\My.txt”,”w”);//以写的方式打开文件
fputs(str,fp);//
fclose(fp);
}
typedef structworker
{
Char Id[10];
Char Name[10];
Int Age;
}WOR;
Void main()
{
FILE *fp;
WOR w[5]={
{“w1”,”战士”,31},{“w2”,”战士”,34},{“w3”,”战士”,34},
{“w4”,”战士”,34},{“w5”,”战士”,34}
};
Fp=fopen(“c:\\chen\\worker.data”,”wb”);//表示打开一个二进制文件并进行写入
For(inti=0;i<5;i++)
{
Fwrite(&w[i],sizeof(WOR),1,fp); //通过fwrite文件进行写入
}
Fclose(fp);关闭文件
}
Void main
{
FILE *fp;
Fp=fopen(“c:\\chen\\workker.data”,”rb”);//打开一个二进制文件进行读
While(!feof(fp))
{
Fread(&w,sizeof(WOR),1,fp);
Printf(“%s\t%s\t%s”,w.Id,w.Name,w.Age);
}
fclose(fp);
}
文件的定位
1、文件指针的定位
2、当文件刚刚打开的时候,文件指针会自动指向文件的开头
3、随着我们调用读写函数文件指针也会自动地向后移动
4、有时候为了编程需要,我们可能要通过程序手动地去移动文件指针
5、文件定位函数:
A、fseek函数:用来移动文件指针到文件某一个位置
格式:fseek(fp,移动的距离,参考点);
参考点:SEEK_SET从文件的开始位置、SEEK_END:从文件的末尾、SEEK_CUR:从文件的当前位置;位移量:正数表示向文件的尾部方向移动;负数表示向文件的开头方向移动。
rewind函数:把文件指针移动到开头
格式:rewind(fp);相当于fseek(fp,0,SEEK_SET);
void main()
{
FILE *fp;
char ch;
fp=Fopen(“c:\\chen\\My.txt”,”r”);//以读的形式打开文件
fseek(fp,2,SEEK_SET);//以文件开始位置为参考点,向文件尾部移动2个单位
ch=fgetc(fp);//表示从文件里读出一个字符,这个函数有把指针向后移动的功能
printf(“%c”,ch);
fseek(fp,1,SEEK_CUR);//表示从文件当前位置为参考点向后移动一个单位
ch=fgetc(fp);//表示从文件里读出一个字符,这个函数有把指针向后移动的功能
printf(“%c”,ch);
fseek(fp,-2,SEEK_END);//表示从文件尾部位置为参考点向前移动2个单位
ch=fgetc(fp);//表示从文件里读出一个字符,这个函数有把指针向后移动的功能
printf(“%c”,ch);
fclose(fp);
}
总结:
函数名 | 功能 | 格式 |
fopen | 打开一个文件 | fopen(“要打开的文件名”,”打开方式”) |
fclose | 关闭一个文件 | fclose(文件指针) |
feof | 判断一个文件指针是否到末尾 | while(!feof(fp)) |
fgetc | 从fp指向文件中读取一个字符ch=fgetc(fp) | ch=fgetc(fp) |
fputc | 从fp所指向文件中写入一个字符Ch=fputc(fp) | ch=fputc(fp) |
fputs | 写入一个字符串 | fputs(str,fp) |
fgets | 读入一个字符串 | fgets(str,n,fp) |
fwrite | 二进制文件的写(结构体) | fwrite(&结构体变量名,sizeof(结构体类型),1,fp) |
fread | 二进制文件的读(结构体) | fread(&结构体变量名,sizeof(结构体类型),1,fp) |
fseek | 文件指针定位函数 | fseek(fp,位移量,参考点) |
rewind | 把文件指针移动到开头 | Rewind(fp);相当于fseek(fp,0,SEEK_SET) |