文件的读取与写入(笔记分享)@__@

C文件概述

文件的打开与关闭

操作符号

“r'' : (只读)为输入打开一个文本 文件

“w" : (只写) 为输出打开一个文本 文件

”a" : (追加) 在文本文件尾增加数据

“rb" : (只读)为输入打开一个二进制 文件

”wb" : (只读)为输出打开一个二进制 文件


打开关闭文件函数:

  FILE *fp;   //定义文件指针 
  ​
  fp = fopen (" D :\date.text " , " w ") ;//w是在文件中写入;r是从文件中读;a是在文本文件尾追加
  ​
  if (fp == NULL ){
      printf("not found" );
      exit(0);//终止程序
  }
  ​
  fclose(fp );




文件的读写

注意:文本可以新建,但是文件不可以,必须先手动建立一个文件后再打开写入

文本文件

一、字符输入输出函数

(fputc() 和 fgetc() )

 char ch ;//写入
  ch = getchar();
  while(ch != '#'){
    putchar(ch);
    fputc(  ch , fp ) ;   //将ch字符一个一个地写入fp指向的文件中;
    ch = getchar();
  }
char ch ;//读取
  ch = fgetc(fp) ;//从文件中读取字符
  while( ch !=  EOF ){//EOF是不可输出字符!!!
    putchar(ch);
    ch = fgetc(fp) ;
  }


(fputs() 和 fgets())

 char a[10];//写入
  gets(a) ;
  fputs( a , fp ) ;//将a字符串写入文本文件中
  puts(a);
 char a[20] ;//读取
  fgets(a ,13 , fp ) ;//注意格式
  puts(a);


二进制文件

char ch ;//读取
  ch = fgetc( fp ) ;
  while( !feof ){
    putchar( ch ) ;
    ch = fgetc( fp );
  }

一个文件写入另一个文件(二进制为例子)

FILE *fp1 , *fp2 ;
  char ch ;
  fp1 = fopen("d:\\date.txt" , "r");
  if(fp1 == NULL ) ......
  fp2 = fopen("d:\\date2.txt" , "w");//如果不设置文本路径,就会和程序在同一个位置
  if(fp2 == NULL ) ......
  while( !feof ){  //end of file
      ch = fgetc(fp1);
      fputc( ch , fp2 );
  }


数据块读写函数(fread 和 fwrite)

fread( buffer , size , count , fp ) ;

fwrite( fp , size , count , buffer ) ;

参数说明:

buffer :一个指针

对 fread 来 说 它 是 读 入 数 据 的 存 放 地 址

对 fwrite 来 说 它 是 输 出 数 据 的 地 址 (均 指 起 始 地 址 )

size : 要 读 写 的 字 节 数

count : 要 进 行 读 写 多 少 个 size 字 节 的 数 据 项

fp : 文 件 型 指 针

例如:fread( f , 4 , 2 , fp ) ;

此 函 数 从 fp 所 指 向 的 文 件 中 读 入 2 个 4 个 字 节 的 数 据 ,存 储 到 数 组 f 中 。

代码如下:

struct stud{
  int num;
  int age;
}stu1[3] ,stu2[3] ;
//
void save(){
   FILE *fp;
   if((fp = fopen("d:\\date1.txt" , "wb")) == NULL )...
   for( int i = 0 ; i < 3 ; i++)
     if(fwrite( &stu1[i] , sizeof(struct stud) , 1 , fp  ) != 1) {
           printf("write erorr");
           return ;//将stu1写进fp文件
     }
    fclose(fp);
}

void print(){
  FILE *fp;
  if((fp = fopen("d:\\date1.txt" , "wr") == NULL)...
     for( int i = 0 ;i < 3; i++){
        fread(&stu2[i] , sizeof(struct stud) , 1, fp );//将fp文件写进stu2
        printf("%8d %8d\n", stu2[i].num ,sttu2[i].age );
     }  
     fclose(fp);
     return ;
}
     
     int main(){
         for( int i = 0 ; i < 3 ; i++) scanf("%d%d" , &stu1[i].num , &stu1[i].age );
         save();
         print();
         return 0;
}

*****************大一程序训练的学习笔记,有错请指出~谢谢@__@

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值