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.文件读写的函数并不能直接在终端上读写,需要以变量的形式来对文件进行写入和读出