文件概述
文件分类:
1.按文件的逻辑结构:
记录文件:由具有一定结构的记录组成(定长和不定长)
流式文件:由一个个字符(字节)数据顺序组成按存储介质:
普通文件:存储介质文件(磁盘、磁带等)
设备文件:非存储介质(键盘、显示器、打印机等)
2.按数据的组织形式:
文本文件: ASCII文件,每个字节存放一个字符的ASCII码二进制文件:数据按其在内存中的存储形式原样存放
一,基础函数
1.打开文件函数
FILE fopen( const char filename, const char mode );
作用:打开一个指定的文件进行操作。
在这里,filename 是字符串,用来命名文件,访问模式 *mode 的值可以是下列值中的一个:
模式 | 描述 |
---|---|
r | 打开一个已有的文本文件,允许读取文件。 |
w | 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。 |
a | 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。 |
r+ | 打开一个文本文件,允许读写文件。 |
w+ | 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。 |
a+ | 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。 |
如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:
“rb”, “wb”, “ab”, “rb+”, “r+b”, “wb+”, “w+b”, “ab+”, “a+b”
注意:若打开失败会返回NULL
所以对文件操作前要进行判断文件是否打开成功。
FILE *in;
char name[200]="C:/Users/虚无/Desktop/aaa.txt";
in=fopen("C:/Users/虚无/Desktop/aaa.txt","w");
if(in==NULL){
printf("文件打开失败!");
exit(0);
}
2.关闭文件
int fclose( FILE fp );
作用:对文件操作完毕后关闭文件。
如果成功关闭文件,fclose( ) 函数返回零,如果关闭文件时发生错误,函数返回 EOF。这个函数实际上,会清空缓冲区中的数据,关闭文件,并释放用于该文件的所有内存。EOF 是一个定义在头文件 *stdio.h 中的常量。
if(fclose( FILE *fp )!=EOF){
printf("关闭成功");
}
else
printf("关闭失败");
3.判断读取文件是否读取完
int feof(FILE *fp);
如果已到文件尾则返回非零值, 其他情况返回0. 返回值:返回非零值代表已到达文件尾
if(feof(FILE *fp)!=0){
printf("到尾部!");
}
一,文件写入
1.字符I/O:fputc与fgetc
fputc
函数原型:int fputc(int c, FILE *fp)
功能:把一字节代码c写入fp指向的文件中返值:正常,返回c;出错,为EOF
fgetc
fgetc函数原型:int fgetc(FILE *fp)
功能:从fp指向的文件中读取一字节代码返值:正常,返回读到的代码值;读到文件尾或出错,为EOF
文件保存:
#include <stdio.h>
#include<stdlib.h>
int main()
{ FILE *fp;
char ch,filename[10]="out.txt";
if((fp=fopen(filename,"w"))==NULL)
{ printf("文件打开失败!\n");
exit(0);
}
printf("请输入内容,#代表结束:");
ch=getchar();
while(ch!='#')
{ fputc(ch,fp);
putchar(ch);//把保存的内容打印出来
ch=getchar();//读取下一个字符
}
fclose(fp);
}
#include <stdio.h>
#include<stdlib.h>
int main()
{ FILE *fp;
char ch,*filename="out.txt";
if((fp=fopen(filename,"r"))==NULL)
{ printf("打开文件失败\n");
exit(0);
}
while((ch=fgetc(fp))!=EOF)
putchar(ch);
fclose(fp);
}
数据块(一组数据)I/O: fread与fwrite
函数调用形式
fread (buffer, size, count, fp)
fwrite(buffer, size, count, fp)
功能:读/写数据块返值:成功,返回读/写的块数;出错或文件尾,返回0说明:buffer: 指向要输入/输出数据块的首地址的指针size: 每个要读/写的数据块的大小(字节数)count: 要读/写的数据块的个数fp: 要读/写的文件指针fread与fwrite 一般用于二进制文件的输入/输出
I/O:fprintf/fscanf
fscanf(文件指针,格式字符串,输入表列);
fprintf(文件指针,格式字符串,输出表列);
功能:按格式对文件进行I/O操作
返值:成功,返回I/O的个数;出错或文件尾,返回EOF
printf:显示,打印函数,显示到屏幕上
fprintf:显示,打印函数,打印到文件里
scanf:,读取,从设备读取到缓冲区。
fscanf:,读取,从文件读取到缓冲区里。
例 fprintf(fp,“%d,%6.2f”,i,t); //将i和t按%d,%6.2f格式输出到fp文件
fscanf(fp,“%d,%f”,&i,&t); //若文件中有3,4.5 ,则将3送入i, 4.5送入t
#include <stdio.h>
#include<stdlib.h>
int main()
{ char s[80],c[80];
int a=1,b=3;
printf("输入一串字符:");
scanf("%s",s);
FILE *fp;
if((fp=fopen("test","w"))==NULL)
{
printf("文件打开失败!");
exit(0);
}
fprintf(fp,"%s %d",s,a);/*write to file*/
fclose(fp);
if((fp=fopen("test","r"))==NULL)
{ puts("can't open file");
exit(0);
}
fscanf(fp,"%s%d",c,&b);/*read from file*/
printf("%s %d",c,b);
fclose(fp);
}