返回介绍

9.2.4 以块的方式读写文件

发布于 2025-04-11 22:33:05 字数 1871 浏览 0 评论 0 收藏 0

通过格式化的方式读写文件,可以很方便地在文件中处理像结构体这种类型的数据。下面再来介绍块方式读写文件的函数,它可以对二进制文件进行读写,对于在文件中处理结构体、数组等类型的数据非常合适。

块的写入函数 fwrite 的函数原型如下:

int fwrite(const void *buffer, size_t size, size_t count, FILE *stream);

fwrite 函数有 4 个参数,其中 buffer 为所要写入数据的首地址,即指向写入数据的指针;size 为数据块的大小;count 为数据块的数量;stream 为与文件相关联的输出流。fwrite 函数的功能就是将 buffer 所指向的 count 个 size 大小的数据块写入到 stream 相关联的文件中。函数的返回值为所写入文件的数据块的数量,正常情况下,应该为参数 count 的值。

假设有一个结构体 STU 类型的变量,现在想将其写入到 D 盘的 test.dat 文件,就可以这样使用 fwrite 函数,参数 size 为结构体变量的大小,而参数 count 为 1,即将 1 个结构体变量大小的数据块写入到 D 盘 test.dat 文件。例如:

fopen 函数中,打开文件的模式字符串为“wb”,即以二进制写入的模式打开文件。在 fwrite 函数中,第一个参数为结构体变量 stu 的内存地址,第二个参数为一个数据块的大小,即结构体变量 stu 的大小,第三个参数为数据块的数量,这里为 1,第四个参数为与 D 盘 test.dat 文件相关联的输出流。

编译运行该程序,正常情况下,在控制台窗口没有任何信息,但打开计算机上的 D 盘,会发现一个名为 test.dat 的文件。以文本的方式打开该文件,会看到许多乱码,这是因为 test.dat 并非文本文件,而是一个二进制文件,即存储在文件中的并非字符的 ASCII 码,因而无法转换为可读的字符。

下面再来介绍和 fwrite 函数相对应的 fread 函数,它可以以数据块的方式从文件中读取数据。fread 函数的原型如下:

int fread(void *buffer, size_t size, size_t num, FILE *stream);

fread 函数的参数和 fwirte 函数的参数一致,意义也相同,但作用相反。即 fread 函数的功能为从 stream 相关联的文件中读取 num 个 size 大小的数据块,存储到 buffer 所指向的内存空间中。fread 函数的返回值为所读取到的数据块的个数,正常情况下,应为参数 num 的值。

下面使用 fread 函数,从 D 盘 test.dat 文件读取数据,并在控制台窗口上打印结果。程序代码如下:

在打开 D 盘 test.dat 文件时,采用的是“rb”模式,即以二进制读取的模式打开文件。在 fread 函数中,数据块大小为结构体变量 stu 的大小,数据块的数量为 1,将读取到的数据存储至结构体变量 stu 中。

编译运行程序,结果如下:

num:100
name:zhangsan
score:90.50

在了解了如何对结构体变量进行二进制数据格式的文件读写后,大家可以想一下,如果将数据块设置为数组元素的大小,数据块的数量设置为数组的长度,那么就可以很容易地通过 fwrite 函数和 fread 函数对数组类型的数据进行二进制的写入和读取。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。