• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C语言以数据块的形式读写文件实例代码

C语言以数据块的形式读写文件实例代码

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c语言块注释,c语言语句块,c语言别踩白块,c语言别踩白块代码,c语言编程实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

fgets() 有局限性,每次最多只能从文件中读取一行内容,因为 fgets 遇到换行符就结束读取。如果希望读取多行内容,需要使用 fread 函数;相应地写入函数为 fwrite。

fread() 函数用来从指定文件中读取块数据。所谓块数据,也就是若干个字节的数据,可以是一个字符,可以是一个字符串,可以是多行数据,并没有什么限制。fread() 的原型为:

size_t fread ( void *ptr, size_t size, size_t count, FILE *fp );
</div>

fwrite() 函数用来向文件中写入块数据,它的原型为:

size_t fwrite ( void * ptr, size_t size, size_t count, FILE *fp );
</div>

对参数的说明:

ptr 为内存区块的指针,它可以是数组、变量、结构体等。fread() 中的 ptr 用来存放读取到的数据,fwrite() 中的 ptr 用来存放要写入的数据。

size:表示每个数据块的字节数。

count:表示要读写的数据块的块数。

fp:表示文件指针。

理论上,每次读写 size*count 个字节的数据。

size_t 是在 stddef.h 头文件中使用 typedef 定义的数据类型,表示无符号整数,也即非负数,常用来表示数量。

返回值:返回成功读写的块数,也即 count。如果返回值小于 count:

对于 fwrite() 来说,肯定发生了写入错误,可以用 ferror() 函数检测。

对于 fread() 来说,可能读到了文件末尾,可能发生了错误,可以用 ferror() 或 feof() 检测。

【示例】从键盘输入一个数组,将数组写入文件再读取出来。

#include<stdio.h>
#define N 5
int main(){
  //从键盘输入的数据放入a,从文件读取的数据放入b
  int a[N], b[N];
  int i, size = sizeof(int);
  FILE *fp;
  if( (fp=fopen("D:\\demo.txt", "rb+")) == NULL ){
    printf("Cannot open file, press any key to exit!\n");
    getch();
    exit(1);
  }
 
  //从键盘输入数据 并保存到数组a
  for(i=0; i<N; i++){
    scanf("%d", &a[i]);
  }
  //将数组a的内容写入到文件
  fwrite(a, size, N, fp);
  //将文件中的位置指针重新定位到文件开头
  rewind(fp);
  //从文件读取内容并保存到数组b
  fread(b, size, N, fp);
  //在屏幕上显示数组b的内容
  for(i=0; i<N; i++){
    printf("%d ", b[i]);
  }
  printf("\n");
  fclose(fp);
  return 0;
}
</div>

运行结果:

23 409 500 100 222↙

23 409 500 100 222

fwrite()/fread() 函数直接操作字节,建议使用二进制方式打开文件。请阅读《C语言中文本文件与二进制文件的区别》了解更多。

打开 D:\\demo.txt,发现文件内容根本无法阅读。这是因为我们使用"rb+"方式打开文件,数据以二进制形式写入文件,一般无法阅读。

数据写入完毕后,位置指针在文件的末尾,要想读取数据,必须将文件指针移动到文件开头,这就是rewind(fp);的作用。更多关于rewind函数的内容请点击:C语言rewind函数。

文件的后缀不一定是 .txt,它可以是任意的,你可以自己命名,例如 demo.ddd、demo.doc、demo.diy 等。

【示例】从键盘输入两个学生数据,写入一个文件中,再读出这两个学生的数据显示在屏幕上。

#include<stdio.h>
#define N 2
struct stu{
  char name[10]; //姓名
  int num; //学号
  int age; //年龄
  float score; //成绩
}boya[N], boyb[N], *pa, *pb;
int main(){
  FILE *fp;
  int i;
  pa = boya;
  pb = boyb;
  if( (fp=fopen("d:\\demo.txt", "wb+")) == NULL ){
    printf("Cannot open file, press any key to exit!\n");
    getch();
    exit(1);
  }
  //从键盘输入数据
  printf("Input data:\n");
  for(i=0; i<N; i++,pa++){
    scanf("%s %d %d %f",pa->name, &pa->num,&pa->age, &pa->score);
  }
  //将数组 boya 的数据写入文件
  fwrite(boya, sizeof(struct stu), N, fp);
  //将文件指针重置到文件开头
  rewind(fp);
  //从文件读取数据并保存到数据 boyb
  fread(boyb, sizeof(struct stu), N, fp);
  //输出数组 boyb 中的数据
  for(i=0; i<N; i++,pb++){
    printf("%s %d %d %f\n", pb->name, pb->num, pb->age, pb->score);
  }
  fclose(fp);
  return 0;
}
</div>

运行结果:

Input data:

Tom 2 15 90.5↙

Hua 1 14 99↙

Tom  2  15  90.500000

Hua  1  14  99.000000

以上就是对C语言以数据块形式读取的实例代码,希望能帮助学习这部分内容的同学。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C语言 以数据块的形式读写文件详解及实现代码
  • C语言以数据块的形式读写文件实例代码

相关文章

  • 2017-05-28VC使用编译时间作为版本号标识的方法
  • 2017-05-28判断一个数是不是素数的方法
  • 2017-05-28枚举类型的定义和应用总结
  • 2017-05-28linux c语言操作数据库(连接sqlite数据库)
  • 2017-05-28C++回溯法实例分析
  • 2017-05-28C++设计模式之桥接模式
  • 2017-05-28深入串的模式匹配算法(普通算法和KMP算法)的详解
  • 2017-05-28关于背包问题的一些理解和应用
  • 2017-05-28C语言中怎么在main函数开始前执行函数
  • 2017-05-28C++实现 单例模式实例详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++11新特性之auto的使用
    • C++删除指定文件夹下N天及之前日志文件的方法
    • C语言中打印特殊图案的实现代码
    • exit和atexit的区别详细解析
    • C语言中查找字符在字符串中出现的位置的方法
    • c计算闰年
    • C++中 STL list详解及简单实例
    • 桶排序算法的理解及C语言版代码示例
    • C++实现inline hook的原理及应用实例
    • c语言实现词频统计的简单实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有