内容正文:
第十章 数据永久存储--文件操作
1
CONTENTS
目录
01
02
文件的打开与关闭
文件的认知
03
文件的顺序读写及应用
04
文件的其他操作
C语言
知识树
My First Template
3、文件的顺序读写及应用
C语言程序设计
4
C语言程序设计—文件的顺序读写及其应用
C语言
文件的打开(fopen()函数)
文件的关闭(fclose()函数)
My First Template
C语言
C语言程序设计—文件的顺序读写及其应用
在顺序写时,先写入的数据存放在文件中前面的位置,后写入的数据存放在文件中后面的位置。
在顺序读时,先读文件中前面的数据,后读文件中后面的数据。
文件的顺序读写
My First Template
C语言
本次任务
从键盘输入1个学生信息将数据存储到磁盘文件中
C语言程序设计—文件的顺序读写及其应用
My First Template
CONTENTS
内容
字符数据的读写
01
字符串数据的读写
02
二进制数据的读写
03
数据的格式化读写
04
任务实现
05
8
字符数据的读写
01
C语言
字符读取函数fgetc()
字符数据的读写
int fgetc (FILE *fp);
说 明1:fgetc为函数名,该函数有1个参数,fp为文件指针,意思是从fp指针指向的文件读入一个字符。
说 明2:fgetc()函数调用前必须保证文件是以读或者读写的方式打开的。
说 明3:fgetc()读取成功时返回读取到的字符,读取到文件末尾或读取失败时返回EOF。
说 明4:fgetc()读函数返回值为int型主要是为了包含文件末尾或者失败返回的EOF,EOF在很多编译器中用-1表示。
说 明5:每次使用fgetc()函数后,该位置指针会向后移动一个字节。因此可使用fgetc()函数读取多个字符。
My First Template
C语言
字符写入函数fputc()
字符数据的读写
int fputc (char ch,FILE *fp);
说 明1:fputc为函数名,ch为要向文件写入的内容,fp表示文件指针,每次使用fputc ()函数后,位置指针也会向后移动一个字节,因此借助循环输出,可以将批量字符输出到文件之中。
说 明2:int为返回值类型,如果写入字符成功则返回写入的字符,否则返回EOF,一般可以使用不等于EOF来判断写入字符成功。
说 明3:使用fputc()函数写入字符,要求在打开被写入文件时必须包含写、读写或者追加的权限。
My First Template
字符串数据的读写
02
C语言
字符串读取函数fgets()
字符串数据的读写
char *fgets(char *str, int n, FILE *fp);
说 明1:从fp指向的文件中读取n-1个字符,并把他们存放到由str指针指向的字符数组中,最后加上字符串结束符'\0'。
说 明2:str表示接受字符串的内存地址,可以是数组名,也可以是指针;n表示要读取的字符的个数,这里注意实际读取的长度是n-1,因为要留1个字节长度存储字符串结束标记'\0';fp是文件指针,指向要读取的文件。
说 明3:fgets()函数的返回值是一个地址。如果正常返回,则返回字符串的内存首地址,即str的值。如果产生异常则返回NULL。这种情况应当用feof()或ferror()函数来判别是读取到了文件末尾,还是发生了错误。
例如:
fgets(str,10,fp);
My First Template
C语言
字符串写入函数fputs()
字符串数据的读写
int fputs( char *str, FILE *fp );
说 明1:fputs为函数名,将str指向的字符串,写入fp指向的文件中。
说 明2:str是要写入的字符串,fp 为文件指针。写入成功返回非负数,失败则返回EOF。
例如:
fputs(“China”,fp);
My First Template
二进制数据的读写
03
C语言
数据块读出函数fread()
二进制数据的读写
int fread(void *buffer,unsigned size,unsigned count,FILE *fp);
说 明1:从fp指向的文件中,按二进制形式将size*count个数据读到由buffer指定的缓冲区。
说 明2:buffer是一个void型指针,指定要将读入数据存放区域的首地址;
size是一个数据块的字节数,通俗讲就是数据块的大小尺寸;
count指一次读入多少个数据块size;
fp是要读取的文件的文件指针。
说 明3:函数返回值为整型,正常返回count数,异常返回0。
例如:
fread(f,4,10,fp);
My First Template
C语言
数据块写入函数fwrite()
二进制数据的读写
int fwrite(void *buffer, unsigned size, unsigned count,FILE *fp);
说 明1:按二进制形式,将由buffer指定的数据缓冲区内的size*count个数据写入fp指向的文件中。
说 明2:其他参数与返回值和fread()函数一样。
例如:
fwrite(f,4,10,fp);
My First Template
数据的格式化读写
04
C语言
格式化写入函数fprintf()
数据的格式化读写
int fprintf(FILE *fp,char *format,arg_list);
说 明1:将变量表列(arg_list)中的数据,按照format指定的格式,写入由fp指定的文件。
说 明2:fprintf()函数与printf()函数的功能相同,只是printf()函数是将数据写入屏幕文件(stdout),而fprintf()函数将数据写入磁盘文件。
说 明3:fp是文件指针指向要写入数据的文件;format是指向格式化字符串的字符串指针,格式化规则与printf()函数相同;arg_list指要写入文件的变量表列,各变量之间用逗号分隔。
例如:
fprintf(fp,”%d,%6.2f”,i,f);
My First Template
C语言
格式化读取函数fscanf()
数据的格式化读写
int fscanf(FILE *fp, char *format, arg_list);
说 明1:fscanf ()的函数的功能是从文件指针fp指向的文件中连续读取能够匹配format格式的字符到参数列表arg_list中对应的变量里。
说 明2:参数含义和fprintf ()函数相同。
例如:
fscanf(fp,”%d,%f”,&i,&f);
My First Template
任务实现
05
C语言
本次任务
从键盘输入1个学生信息将数据存储到磁盘文件中
C语言程序设计—文件的顺序读写及其应用
My First Template
C语言
任务实现
#include "stdio.h
void main()
{
FILE *fp; //定义文件指针
char ch;
fp=fopen("d://aa//abc.txt","w+");
if(fp==NULL)
{//如果文件指针的返回值为null代表文件不存在
printf("该文件不存在");
return;//如果文件不存在或错误退出
}
printf("请输入一个字符串!
");
ch=getchar();//得到一个字符
while(ch!='
')//循环结束条件是读到最后
{
fputc(ch,fp);//将字符输出到文件
ch=getchar();//向后继续读入一个字符
}
fclose(fp);//关闭文件指针
}
打开文件
写入文件
任务实现
My First Template
总结
1. 字符数据的读写
2. 字符串数据的读写
3. 二进制数据读写
4. 数据的格式化读写
$$