文章目录
1.字符串读取文件
- 读字符串函数 fgets()
函数原型:
char *fgets(char *str,int n,FILE *fp);
//其意义是从fp所指的文件中读取10个字符送入字符数组str中,接着再将str字符串打印出,若文件读不到数据则返回NULL,此时会离开循环。
FILE *fp;
char str[10];
fp=fopen("E:\\code\\1.txt","rt");
while((fgets(str,10,fp)!=NULL){
printf("os",str);
}
其功能是:在文件指针所指文件位置读取n个字符并放入str字符数组中。如果读不到字符串,则返回NULL。
- 写字符串函数 fputs()
函数原型:
int fputs(char *str,FILE *fp);
//其意义是把字符串str中的内容写入文件指针fp所指文件。
FILE *fp;
char str[10];
fp=fopen("E:\\code\\1.txt","rt");
gets(str);
fputs(str,fp);
其功能是:将字符串str写入文件指针fp所指文件的位置。写入数据成功时返回非0值,写入失败时返回EOF。其中,字符串str可以是字符串常量,也可以是字符数组名或指针变量。
2.格式化字符串读写函数
- 格式化字符串读函数 fscanfO)
函数原型:
int fscanf(FILE *fp,”格式化字符串”,输入项地址表);
//E盘code文件夹下1.txt中存有以下数据,该数据有学号、姓名、性别三项数据,现从该文件中读取出该条数据指定的变量
FILE *fp;
char num[20],name[40],sex[5];
fp=fopen("E:\\code\\1.txt","t");
fscanf(fp,"%s %s %s",num,name,sex);
功能:从文件指针fp所指向的文件中按照格式字符串指定的格式,将文件中的数据送到输入项地址表中。若读取数据成功会返回所读取数据的个数,并将数据按照指定格式存入内存中的变量或数组中,文件指针自动向下移动;若读取失败则返回EOF。
- 格式化字符串写函数 fprintf()
函数原型:
int fprintf(FILE *FP,"格式化字符串",输出项地址表);
//首先,初始化要追加的数据,然后以追加写方式打开指定文件。
char num[20]="20210101",name[40]="某某",sex[5]="男";
FILE *fp;
fp=fopen("E:\\code\\1.txt","a+");
fputc('\n',fp); /*写入一个回车换行,保持原文件格式不变*/
fprintf(fp,"%s %s %s",num,name,sex);
功能:将输出项表中的变量值按照格式字符串指定的格式输出到文件指针fp所指向的文件位置
3.数据块读写操作
- 数据块读函数fread()
函数原型:
int fread(void *buffer,int size,int count,FILE* fp);
函数fread()内各个参数的含义如下:
(1) buffer是一个指针,它表示存放读入数据的首地址(即存放在何处)。
(2) size表示数据块的字节数。
(3) count表示要读写的数据块块数。
//其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实型数组fa中,连续读5次,即读5个实数到fa中
float fa[5];
fread(fa.4,5,fp);
功能:从文件指针fp所指向的文件的当前位置开始**,一次读入size个字节,重复count次**,并将读取到的数据存到buffer 开始的内存区中,同时将读写位置指针后移size*count次。该函数的返回值是实际读取的count值。
- 数据块写函数fwrite()
函数原型:
int fwrite(void *buffer,int size,int count, FILE* fp);
函数fwrite()内各个参数的含义如下:
(1) buffer是一个指针,它表示要输出的数据在内存中的首地址(即从何处开始存储)。
(2) size表示数据块的字节数。
(3) count表示要读写的数据块块数
//其意义是从fa实型数组中,每次读4个字节(一个实数)写入fp所指的文件中,连续读写5次,即将5个实数写到fp所指的文件中。
float fa[5];
fwrite(fa.45,fp);
功能:从buffer所指向的内存区开始,一次输出size个字节,重复count次,并将输出的数据存入到fp所指向的文件中,同时将读写位置指针后移size*count次。
4.文件的随机读取
- 函数rewind()
函数原型:
void rewind(FILE *fp);
其功能是:将文件内部的位置指针移到文件的开始位置。
- 函数 fseek( )
函数原型:
int fseek(FILE *fp, long offset,int whence);
第2个参数是偏移量(offset)。
该参数表示从起始点开始要移动的距离(参见表)的起始点模式)。
该参数必须是一个1ong类型的值,可以为正(前移)、负(后移)或0(保持不动)
第3个参数是模式,该参数确定起始点。
其功能是:文件指针由whence地址移到offset的地址。
模式 | 偏移量起始位置 |
---|---|
SEEK_SET | 文件开始初 |
SEEK_CUR | 当前位置 |
SSEK_END | 文件末尾 |
下面是调用fseek()函数的一些示例,fp是一个文件指针:
fseek(fp, 0, SEEK SET); //定位至文件开始处
fseek(fp,10,SEEK_SET); //定位至文件中的第 10 个字节
fseek(fp, 2,SEEK CUR); //从文件当前位置前移2个字节
fseek(fp, 0,SEEK_END); //定位至文件结尾
fseek(fp,-10,SEEK_END);//从文件结尾处回退 10 个字节
- 函数ftell()
函数 ftell)的作用是得到流式文件的当前位置,用相对于文件开头的位移量来表示。
如果ftell函数返回值为-1L,表示出错。例如:
i=ftell(fp);
if(i==-1L){
printf("Error!\n”);
}
变量i存放在当前位置,如调用函数出错(如不存在此文件),则输出“Error!”。
5.出错检查
- 函数feof()
函数原型:
int feof(FILE *fp);
功能:判断文件指针fp是否处于文件结束位置,若文件结束,则返回值为1,否则为0。
- 函数 ferror( )
函数原型:
int ferror(FILE *fp);
功能:检查文件在用各种输入/输出函数进行读写时是否出错。如果ferror返回值为0表示未出错,否则表示有错。
应该注意,对同一个文件每一次调用输入/输出函数,均产生一个新的ferror函数值,因此,应当在执行fopen函数时,ferror函数的初始值自动置0。
- 函数clearerr()
函数原型:
int clearerr(FILE *fp);
功能:用于清除出错标志和文件结束标志,使它们为0值。假设在调用一个输入输出函数时出现错误,ferror函数值为一个非0值。在调用clearerr(fp)后,ferror(fp)的值变为0。
只要出现错误标志,就会一直保留,直到对同一文件调用clearerr函数或rewind函数,或任何其他一个输入/输出函数。