• 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 );

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

size_t fwrite ( void * ptr, size_t size, size_t count, FILE *fp );

对参数的说明:

  1. ptr 为内存区块的指针,它可以是数组、变量、结构体等。fread() 中的 ptr 用来存放读取到的数据,fwrite() 中的 ptr 用来存放要
  2. 写入的数据。
  3. size:表示每个数据块的字节数。
  4. count:表示要读写的数据块的块数。
  5. fp:表示文件指针。
  6. 理论上,每次读写 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-28C++Primer笔记之顺序容器的使用详解
  • 2017-05-28C++软件添加dump调试打印日志(推荐)
  • 2017-05-28基于c语言知识点的补遗介绍
  • 2017-05-28c++几种基本的插入排序(图文)
  • 2017-05-28C语言的Struct Hack笔记
  • 2017-05-28北邮计算机考研复试题的C语言解答精选
  • 2017-05-28简单了解设计模式中的装饰者模式及C++版代码实现
  • 2017-05-28解析c中stdout与stderr容易忽视的一些细节
  • 2017-05-28详解C语言位域的使用与注意事项
  • 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++位操作的常见用法小结
    • 深入uCOS中全局变量的使用详解
    • 最小生成树算法C语言代码实例
    • VC中SendMessage和PostMessage的区别
    • C语言中字符串和数字的相互转换实现代码
    • C++标准库中sstream与strstream的区别详细解析
    • 基于C++语言实现机动车违章处罚管理系统
    • C++无法重载点符号、::、sizeof等的原因
    • C++、python和go语言实现的简单客户端服务器代码示例
    • 对C语言中sizeof细节的三点分析介绍

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

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