1、文件:指存储在外部介质上数据的集合,这个数据集有个名称,叫做文件名。
内存中的数据在断电时数据就丢失了,硬盘则不会。
2、对文件的操作步骤
1)、引入头文件(stdio.h)
2)、定义文件指针
3)、打开文件
4)、文件读写
5)、关闭文件
3、对文件的读写操作函数(在头文件stdio.h)
1)、字符读写函数:fgetc和fputc
2)、字符串读写函数:fgets和fputs
3)、数据库读写函数:freed和fwrite
4)、格式化读写函数:fscanf和fprintf
4、文件操作的原理
文件缓冲区:指的是系统自动地在内存区为程序中每一个正在使用的文件开辟一个文件缓冲区,分为输入缓冲区和输出缓冲区。
输入操作时,数据从文件流向计算机内存——文件读写;输出操作时,数据从计算机流向文件——文件写入。
把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的时间,对二进制文件的读写不存在这种转换。
标准输入文件(键盘),标准输出文件(显示器),标准出错输出(出错信息)是有系统打开的,可直接使用。
5、C语言文件指针
用一个指针变量指向一个文件,即为文件指针。
文件指针的一般形式:FILE *指针变量标识符;//FILE大写,其为系统定义的一个结构。
例:FILE *fp;
6、文件的打开(fopen函数)和关闭(fclose函数)
1)、 fopen调用的形式:文件指针变量名=fopen(文件名,文件使用方式)
例如:FILE *fp=NULL;
fp=fopen("a.txt","r");//r表示读文件
表示在当前目录下打开文件a.txt,只允许进行“读”操作,并使fp指向该文件。
2)、fclose函数调用的形式:fclose(文件指针);
例如:fclose(fp);//正常完成关闭文件操作时,fclose函数返回值为0,若返回非零值则表示有错误发生。
7、文件使用方式
r---打开一个已存在的文件,准备从文件中读取数据,不能向文件中写数据
w---创建一个新文件,准备向文件写入数据。不能从文件中读取数据,若文件已存在,这个文件将被覆盖。wb---写入二进制文件
a---打开已存在的文件,准备在文件尾部追加数据。不能从文件中读取数据,若文件不存在,则创建这个文件准备写入文件。
r+---打开已存在的文件,准备读写。既可以读取数据,也可以写入数据。
w+---创建一个新文件,准备读写,若文件已存在,则覆盖源文件
a+---等价于a,但可从文件中读取数据
t---打开一个文本文件
b---打开一个二进制文件
例://定义文件指针
FILE *fp;
fp=fopen("a.txt","r");
//fopen打开成功,返回文件的首地址,若失败,返回NULL
//fopen去哪里找文件a.txt
//判断是否打开成功
if (fp!=NULL)
{
//操作文件
}
else{
//给用户一个提示
printf("文件打开失败!按任意键退出!\n");
//按任意键退出
getchar();//要求从键盘接收一个字符
//退出
exit();//非正常退出
}
8、rewind()函数:就是把文件指针重新指到文件开头
EOF是文件的末尾的标志
"\0"字符串结束符
"\n"是scanf函数中的结束符和putchar()函数中的结束符,putchar函数遇到'\n',则停止输出
9、查看文本文件的内容
文本文件:又称为ASCII文件--->转换为ASCII码--->二进制--->存储
注意:一个汉字占用3个字节
10、数据块读写函数fread和fwrite
这两个函数可用来读写一组数据,如一个数组元素,一个结构变量的值等。
读数据块函数fread调用的一般形式:fread(buffer,size,count,fp);
写数据块函数fwrite调用的一般形式:fwrite(buffer,size,count,fp);
其中buffer是一个指针,在fread中表示存放输入数据的首地址,在fwrite中表示存放输出数据的首地址;size表示数据块的字节数;count表示要读写的数据块块数;fp表示文件指针。
例:fread(fa,4, 5,fp);即:fread(地址,块大小,块数,文件指针);//表示从fp所指向的文件中,每次读4个字节(一个实数)送人数组fa中,连续读5次,即读5个实数到fa中。
char *str=“Hello world!\n”;
fwrite(str,1,strlen(str),fp);
注意:二进制文件写入的方法:写入的结果可看出,保存123的时候,保存的就是123的值到文件中(以16进制的编辑器打开看是7B)
10、格式化的读写函数fscanf和fprintf
调用格式:fscanf(文件指针,格式字符串,输入列表);
fprintf(文件指针,格式字符串,输出列表);
例:fscanf(fp,"%d%s",&i,s);
fprintf(fp,"%d%c",j,ch);
11、文件的随机读写实现
文件定位:实现随机读写的关键是要按要求移动位置指针
移动文件内部位置指针函数有:rewind()和fseek()
rewind函数的调用形式:rewind(文件指针);//把文件内部的位置指针移动到文件首
fseek函数调用形式:fseek(文件指针,位移量,起始点);//用来移动文件内部位置指针,其中“文件指针”指向被移动的文件,“位移量”表示移动的字节数,要求位移量是long型数据,一遍在文件长度大于64k是不会出错,当用常量表示位移量时,加后缀“L”。”起始点“表示从何处开始计算位移量。规定的起始点有:文件首、当前位置和文件尾。
文件首 SEEK_SET 0
当前位置 SEEK_CUR 1
文件首 SEEK_END 2
例如:fseek(fp,100L,0);//把位置指针移动到离文件首100个字节处
12、文件检测函数feof函数
调用格式:feof(文件指针);//判断文件是否处于文件结束位置,若文件结束,则返回值为1,否则为0,
13、文件出错检测函数ferror函数
调用格式:Ferror(文件指针);//检查文件再用各种输入输出函数进行读写时是否出错,若返回值为0表示未出错,否则表示有错。