1、打开与关闭文件
最常见的打开文件操作:
FILE *fp;
if ( (fp = fopen("data.txt","w")) == NULL ) {
puts("cannot found!");
exit(0);
}
关闭文件操作:
fclose(fp);
2、顺序读写数据文件
<1>把文件中的一个字符读到变量中,一般用fgetc(fp)
// 将文件中的一个字符读到变量后,文件标记位置会自动右移一个
ch = fgetc(fp);
<2>把一个字符写到文件中,一般用fputc(ch,fp)
// 将一个字符写到文件之后,文件标记位置会自动右移一个
ch = getchar();
fputc(ch,fp);
##小插曲##:
feof(fp)表示文件的结束标志,一般用以下方法遍历文件内容
while ( !feof(fp) ) {
、、、
}
fputc,fgetc也可写作putc,getc.
<3>把文件的字符串读到变量中,一般用fgets(str,n,fp)
其中n表示从fp读n-1长度的字符串到str中
fgets(str,11,fp);
// 对文件内的字符串进行批量操作
while ( fgets(str[i],11,fp) != NULL ) {
puts(str[i]);
i++;
}
<4>把字符串输入到文件中,一般用fputs(str,fp)
fputs(str,fp);
<5>fprintf(fp,"%-%-%-",x,y,z…)的使用,作用是向文件中写入此格式的数据,fprintf的特点是格式化
int i = 3;
double j = 4.5;
fprintf(fp,"%d %lf",i,j);
<6>fscanf(fp,"%-%-%-",x,y,z…)的使用,作用是从文件中读取该格式的数据然后输出到变量中,fscanf的特点是格式化
int i = 3;
double j = 4.5;
fscanf(fp,"%d %lf",i,j);
<7>fread(buffer,single_size,count,fp)的使用,作用是从文件中将数据读到变量.
// 从文件中读取一个a变量的数据项到a
fread(&a,sizeof(a),1,fp);
// 在多次输出到变量时判断是否输出成功,其中fread的返回值是count
while ( fread(&a,sizeof(a),1,fp) == 1 ) {
//输出成功
}
<8>fwrite(buffer,single_size,count,fp)的使用,作用是将变量的数据写入文件
// 将一个数据项a写入文件中
fwrite(&a,sizeof(a),1,fp);
// 在多次写入时判断是否写入成功,其中fwrite的返回值是count
while ( fwrite(&a,sizeof(a),1,fp) == 1 ) {
//写入成功
}
3、随机读写数据文件
<1>rewind(fp)的作用是使文件标记位置重新回到文件开头
// 不断遍历文件
while ( !feof(fp) )...
// 将文件标记位置从文件尾指向文件开头
rewind(fp);
// 进行其他操作...
<2>fseek(fp,n*sizeof(a),0/1/2)的作用是使文件标记位置向所需要的方向移动
其中位移量表示需要向右移动的字节数(若为负则向左移),位移量的类型是long,需要在数字后加L{ fseek(fp,50L,0) }.
第三个参数的0表示起始点是文件开头,1表示起始点是当前位置,2为文件末尾位置
// 这样可以对指定文件位置进行读出
fseek(fp,i*sizeof(a),0);
fread(&str[i],sizeof(a),1,fp);
i++;
<3>ftell(fp)的返回值是文件当前标记的位置
总结与归纳:
1.文件打开之后要记得关闭,fopen与fclose要同时存在
2.fgetc,fputc,fgets,fputs,fprintf,fscanf一般用于文本是以ASCII码存储的形式时的文件,若用于二进制文件,则读写转换时效率较低
3.fread,fwrite一般用于文本是以二进制形式存储的文件
4.文件读写的函数并不能直接在终端上读写,需要以变量的形式来对文件进行写入和读出