当前课程知识点:C语言程序设计 >  第12章 文件 >  12.4 二进制文件读写 >  二进制文件读写

返回《C语言程序设计》慕课在线视频课程列表

二进制文件读写在线视频

返回《C语言程序设计》慕课在线视频列表

二进制文件读写课程教案、知识点、字幕

同学们大家好

前一节中我们讲了如何对文本文件进行读写操作

那二进制文件又用什么方式读写呢

也就是如何将内存中的二进制数据直接写入磁盘

又如何将磁盘上的二进制文件如何读入内存呢

C语言中的fread和fwrite函数用二进制方式对文件进行读写

fread函数从文件中读一个数据块

用fwrite函数向文件写一个数据块

在读写时是以二进制形式进行的

在向磁盘写数据时

直接将内存中一组数据原封不动

不加转换地复制到磁盘文件上

在读入时也是将磁盘文件中若干字节的内容一批读入内存

fread函数有4个参数

第一个参数buffer是一个地址

它是用来存放从文件读入的数据的存储区地址

第二个参数size是要读写的字节数

第三个参数count是要读写多少个数据项

每个数据项长度为size

第四个参数是文件类型指针

fread函数的返回值是实际读到的数据项的个数

如果结果与第三个参数count不同

则代表可能读到了文件的尾或者有错误发生

fwrite函数也有4参数

第一个参数buffer也是一个地址

是要把此地址开始的存储区中的数据向文件输出

剩余的参数和fread函数一样

下面这个例子是从磁盘文件中读二进制数据

存放在数组中

然后再把它们转存到磁盘文件上去

首先使用宏定义

定义10个学生

接着定义学生结构体

有姓名 学号 年龄和地址成员

定义全局结构体数组stud[SIZE]定义load函数

用于从磁盘文件读数据到数组中

定义文件指针fp

调用fopen函数使用rb

二进制读的方式打开文件

如果打开文件出错 则程序结束

接着调用fread函数循环读磁盘文件数据保存在结构体数组stud中

循环次数是结构体数组长度

也就是学生的个数10

每次从文件读入一个学生的信息保存在数组stud中

fread函数第一个参数&stud[i]是数组第i个学生的地址

第二个参数sizeof(struct Student tpye)结构体数组的长度

第三个参数1是每次读入一个数据

最后一个参数fp是文件指针

如果fread函数返回值和第三个参数1不同

代表文件到文件尾或出错

接下来用feof判断文件是否到文件尾

feof返回真则表示到文件尾 程序结束

否则是读取文件错误

输出提示信息

接下来定义函数save

向文件输出SIZE个学生的数据

调用fopen函数用wb

方式打开文件stu.dat

准备写入数据

如果返回值为空

则打开文件失败 程序结束

将数组stud中的每个元素写入文件

调用fwrite函数

第一个参数&stud[i]是需要写人的数组元素的地址

第二个参数sizeof(struct Student tpye)是需要写入的数据块的大小

第三个参数是写入的数据项的个数

这里是1 每次写入一个数组元素

最后一个参数是文件指针

当返回值与第三个参数1不同时

写入出错 程序退出

最后关闭文件指针

在main函数中

先调用load函数

将磁盘文件读入内存

再调用save函数

将内存中的二进制数据写入磁盘文件stu.dat文件中

在这个例子中我们使用fread和fwrite函数来对二进制文件进行读写操作

这一节的内容就讲到这里

谢谢大家!

C语言程序设计课程列表:

第1章 C语言程序设计预备知识

-计算思维与计算机

--计算思维与计算机

--计算思维与计算机

--计算思维和计算机

第2章 C语言程序设计基础

-2.1 程序设计语言的发展及其特点和应用

--程序设计语言的发展及其特点和应用

--程序设计语言的特点及发展

- 2.2 C语言程序的基本结构及编制C语言程序的基本步骤

-- C语言程序的基本结构及编制C语言程序的基本步骤

--C语言程序的结构和编制步骤

第3章 基本数据类型、运算符与表达式

-3.1 C语言的数据类型

--C语言的数据类型

--C语言的数据类型

-3.2 常量

--常量

--常量

-3.3 什么是变量

--什么是变量

--什么是变量

-3.4 如何进行算术运算

--如何进行算术运算

--如何进行算术运算

-3.5 赋值运算符和逗号运算符

--赋值运算符和逗号运算符

--赋值运算符和逗号运算符

-3.6 数据类型转换

--数据类型转换

--数据类型转换

第4章 基本输入输出和顺序程序设计

-4.1 格式化输出printf

--格式化输出printf

--格式化输出

-4.2 格式化输入scanf及字符数据的非格式化输入输出

--格式化输入scanf及字符数据的非格式化输入输出

--格式化输入

第5章 选择结构程序设计

-5.1 关系运算符和关系表达式

--关系运算符和关系表达式

--关系运算符和关系表达式

-5.2 逻辑运算符和逻辑表达式

--逻辑运算符和逻辑表达式

--逻辑运算符和逻辑表达式

-5.3 条件运算符和条件表达式

--条件运算符和条件表达式

--条件运算符和条件表达式

-5.4 if语句

--if语句

--if语句

-5.5 switch语句

--switch语句

--switch语句

第6章 循环结构程序设计

-6.1 while语句

--while语句

--while语句

--do-while语句

-6.2 for语句

--for语句

--for语句

-6.3 循环的嵌套

--循环的嵌套

--循环的嵌套

-6.4 break语句和continue语句

--break语句和continue语句

--break和continue语句

第7章 数组

-7.1 一维数组的定义和引用

--一维数组的定义和引用

--一维数组的定义和引用

-7.2 一维数组的赋值

--一维数组的赋值

--一维数组的赋值

-7.3 二维数组的定义和引用

--二维数组的定义和引用

--二维数组的定义和引用

-7.4 二维数组的赋值

--二维数组的赋值

--二维数组的赋值

-7.5 字符串的本质

--字符串的本质

--字符串的本质

-7.6 字符串操作的常用函数

--字符串操作的常用函数

--字符串常用函数

-7.7 字符串数组

--字符串数组

--字符串数组

第8章 函数

-8.1 函数概述

--函数概述

--函数概述

-8.2 有参函数

--有参函数

--有参函数

-8.3 函数参数的传递方式

--函数参数的传递形式

--函数参数的传递方式

-8.4 变量的作用域和生存期

--变量的作用域和生存期

--变量的作用域和生存期

-8.5 变量的存储类型

--变量的存储类型

--变量的存储类型

-8.6 函数的嵌套和递归调用

--函数的嵌套和递归调用

--函数的嵌套和递归调用

-8.7 函数的作用域与封装

--函数的作用域与封装

--函数的作用域与封装

第9章 指针

-9.1 指针变量的概念(上)

--指针变量的概念(上)

--指针变量的概念(上)

-9.2 指针变量的概念(下)

--指针变量的概念(下)

--指针变量的概念(下)

-9.3 指向一维数组的指针变量

--指向一维数组的指针变量

--指向一维数组的指针变量

-9.4 指向二维数组的指针变量(上)

--指向二维数组的指针变量

--指向二维数组的指针变量(上)

-9.5 指向二维数组的指针变量(下)

--指向二维数组的指针变量(下)

--指向二维数组的指针变量(下)

-9.6 动态内存分配

--动态内存分配

--动态内存分配

第10章 预处理命令

-10.1 编译预处理

--编译预处理

第11章 复杂数据类型

-11.1 用户自己建立数据类型

--用户自己建立数据类型

--用户自己建立数据类型

-11.2 定义结构体类型变量

--定义结构体类型变量

--定义结构体类型变量

-11.3 结构体变量的引用与初始化

--结构体变量的引用与初始化

-11.4 结构体数组

--结构体数组

--结构体数组

-11.5 指向结构体类型数据的指针

--指向结构体类型数据的指针

--指向结构体类型数据的指针

第12章 文件

-12.1 文件的基本概念和文件指针

--文件的基本概念和文件指针

--文件的基本概念和文件指针

-12,2 文件的打开和关闭

--文件的打开和关闭

--文件的打开和关闭

-12.3 文本文件读写

--文本文件读写

--文本文件读写

-12.4 二进制文件读写

--二进制文件读写

--二进制文件读写

二进制文件读写笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。