目录
C语言文件学习
概念
文件时程序设计中的一个重要概念。所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称,就是文件名。文件通常是驻留在外部介质(如磁盘上),在使用时才调入内存。
此处不做过相关概念的介绍,只汇总文件基本操作
文件指针 FILE
在C语言中用一个指针变量指向一个文件,这个指针被称为文件指针。通过文件指针就可以对它所指的文件进行各种操作。
FILE *fp
文件打开 fopen
FILE *fp;
fp = fopen("/C/test.txt","rb");
文件关闭 close
fclose(fp);
读字符函数 fgetc
从一个指定文件中读一个字符,形式为:字符变量=fgetc(文件指针)
c = fgetc(fp) //从文件中读取一个字符并送入a中
PS:在文件内部有一个位置指针。用来指向文件的当前读写字节。在文件打开时,该指针总是指向文件的第一个字节。使用fgetc函数后,该位置指针将向后移动一个字节。因此可连续多次使用fgetc函数,读取多个字符。应注意文件指针和文件内部的位置指针不是一回事。文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它不需在程序中定义说明,而是由系统自动设置的。
写字符函数 fputc
把一个字符写入指定的文件中,形式为:fputc(字符量, 文件指针)
fputc('a',fp); //把字符 a 写入 fp 所指向的文件中
PS:fputc 函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF。可用此来判断写入是否成功。
读字符串函数 fgets
读字符串函数 fgets,从指定的文件中读一个字符串到字符数组中,形式为:fgets(字符数组名, n, 文件指针);
其中的n是一个正整数。表示从文件中读出的字符串不超过n-1个字符。在读入的最后一个字符后加上串结束标志 ’\0’
fgets(str, n, fp); //从 fp 所指的文件中读出 n-1 个字符送入字符数组 str 中
PS:
-
在读出n-1个字符之前,如遇到了换行符或EOF,则读出结束
-
fgets 函数也有返回值,其返回值是字符数组的首地址
写字符串函数 fputs
向指定的文件写入一个字符串,其形式为:fputs(字符串, 文件指针);
其中字符串可以是字符串常量,也可以是字符数组名,或指针变量。
fputs("abcd", fp); //将字符串 abcd 写入 fp 所指的文件中
数据块读函数 fread
-
作用:从fp所指的文件中读入count次,每次读size字节,读入的信息存在buffer地址中。
形式为fread(buffer, size, count, fp);
buffer 是一个指针,在fread函数中,它表示存放输入数据的首地址
-
size表示数据块的字节数;
-
count表示要读写的数据块块数;
-
fp表示文件指针;
fread(fa, 4, 5, fp);
//从fp所指的文件中,每次读4个字节(一个实数)送入实数组fa中,连续读5次,即读5个实数到fa中。
数据块写函数 fwrite
-
作用:将buffer地址开始的信息输出count次,每次写size字节到fp所指的文件中。
形式为
fwrite(buffer, size, count, fp);
buffer 是一个指针,在fwrite函数中,它表示存放输出数据的首地址
格式化读写函数 fscanf fprintf
fscanf函数,fprintf 函数与前面使用的scanf和 printf函数的功能相似,都是格式化读写函数。两者的区别在于fscanf 函数和 fprintf函数的读写对象不是键盘和显示器,而是磁盘文件。
格式化读函数:fscanf(文件指针,格式字符串, 输入表列);
fprintf(fp,"%d",i); //将整型变量i的值以"%d"的格式输出到fp指向的文件中
格式化写函数:fprintf(文件指针,格式字符串, 输出表列);
fprintf(fp,"%d",&i); //读入fp所指向的文件中的i的值
文件定位 rewind fseek ftell
1.rewind 函数
将文件内部的位置指针移动到文件首
-
格式为:rewind(文件指针);
2.fseek 函数,
移动文件内部位置指针
-
格式为:fseek(文件指针, 位移量, 起始点);
注意, fseek 函数一般用于二进制文件。
“文件指针” 指向被移动的文件; “位移量"表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB时不会出错。当用常量表示位移量时,要求加后缀”L”。 "起始点"表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾,其表示方法为:
起始点 | 表示符号 | 数字表示 |
---|---|---|
文件首 | SEEK_SET | 0 |
当前位置 | SEEK_CUR | 1 |
文件末尾 | SEEK_END | 2 |
fseek(fp, 100L, 0); //把位置指针移动到离文件首 100 个字节出
3.ftell 函数
得到流式文件中的当前位置,用相对于文件开头的位移量来表示。由于文件中的位置指针经常移动,往往不容易知道其当前位置。用ftell函数可以得到当前位置。
ftell(文件类型指针)
文件检测结束函数 feof
文件结束检测函数(feof 函数),功能为判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。
-
格式为:
feof(文件指针);
读写文件出错检测函数 ferror
读写文件出错检测函数(ferror 函数),功能为检查文件在用各种输入输出函数进行读写时是否出错。如 ferror 返回值为 0 表示未出错,否则表示有错。
-
格式为:
ferror(文件指针);
文件出错标志和文件结束标志置 0 函数 clearerr
文件出错标志和文件结束标志置 0 函数(clearerr 函数),用于清除出错标志和文件结束标志,使它们为 0 值。
-
格式为:
clearerr(文件指针);