C语言-IO流常用代码

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值