Linux中二进制读写函数fread、fwrite使用

二进制文件概念

  • 二进制和文本文件的区别
    存储的格式不同:文本文件只能存储文本。
    计算机内码概念:文本符号在计算机内部的编码(计算机内部只能存储数字0101001…,所以所有符号都要编码)
  • ASCII码就比较重要,一般大小写字符都由ASCII码表示,0101类似这种来表示,因为计算机寄存器只能支持010101

二进制读写函数介绍

  • 函数如下:
    size_t fread(void *ptr, size_t size, size_t n, FILE *fp);//从fp读的内容放进ptr中,返回值时读取的个数
    void *ptr 读取内容放的位置指针
    size_t size 读取的块大小
    size_t n 读取的个数
    FILE *fp 读取的文件指针
    size_t fwrite(const void *ptr, size_t size, size_t n, FILE *fp);//从ptr写入到fp中,其他同上
    void *ptr 写文件的内容的位置指针
    size_t size 写的块大小
    size_t n 写的个数
    FILE *fp 要写的文件指针
    注意事项:
    文件写完后,文件指针指向文件末尾,如果这时候读,读不出来内容。
    解决办法:移动指针(后面讲解)到文件头;关闭文件,重新打开
    注:成功返回读写的对象个数,出错返回-1,既可以读写文本文件,也可以读写数据文件即二进制文件,效率高

  • 二进制读函数的代码如下:
    在这里插入图片描述

  • 执行如下:
    在这里插入图片描述
    注:这个函数更灵活,可以读几个,可以读二进制数据

  • 二进制写函数代码如下:
    在这里插入图片描述

  • 执行vim 1.bin后结果如下:
    在这里插入图片描述

  • 在将1.bin文件中的二进制内容写入到stu2中结构体中,代码如下:

在这里插入图片描述

  • 再次运行上述代码发现输出存在问题,如下:
    在这里插入图片描述
    注:由于前面代码读入1.bin文件中后,文件指针处于文件结尾处,所以在此写入stu2结构体后,输出结果为空,所以数值异常,因此要想解决问题的话,可以再写一个代码,这样文件在打开文件后自动的移至到文件首处
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 是的,您说得对。二进制文件和文本文件的区别在于它们处理文件内容的方式不同。二进制文件包含的是二进制数据,而文本文件包含的是字符数据。因此,如果您将二进制文件的扩展名设置为 .txt,那么文本编辑器可能会尝试解释二进制数据为字符数据,导致数据损坏。同样,二进制文件读写函数freadfwrite也会受到影响,因为它们是基于二进制数据的读写函数。建议在创建二进制文件使用其他扩展名,例如 .bin 或者 .dat。 ### 回答2: 二进制文件名不能用.txt作为扩展名,否则二进制文件读写函数freadfwrite将出错的原因是因为使用.txt作为扩展名会默认将文件视为文本文件进行读写操作。而文本文件二进制文件读写方式上有所不同。 文本文件是指以文本形式保存数据的文件,其的数据是以字符的形式编码的。文本文件读写是以字符为单位进行的,常用的读写函数是fscanf和fprintf。使用这些函数进行读取和写入时,会自动进行字符编码的转换,以文本格式读取和写入数据。 与之不同的是,二进制文件是以字节为单位进行读写文件。它并不对数据进行编码转换,仅将数据以二进制形式直接读取和写入。在二进制文件读写过程使用函数freadfwrite。这些函数会按照指定的字节数读取和写入数据,不会对数据进行字符编码或转换。 当我们将二进制文件使用.txt作为扩展名保存时,操作系统会默认其为文本文件。在使用freadfwrite进行读写时,函数会按照字节为单位进行读写,但由于文件被识别为文本文件,系统会根据字符编码对数据进行解析。由于二进制文件并不是以字符的形式编码,因此读取和写入数据时可能会产生错误。 为了避免这种错误,我们应该将二进制文件的扩展名设计为其他形式,例如.bin、.dat等,以明确表示该文件是以二进制格式存储的。这样,在使用freadfwrite函数读写二进制文件时,系统会按照字节为单位直接进行读写,不会进行字符编码的解析,从而确保数据的正确读写。 ### 回答3: 二进制文件是以二进制形式存储的文件,其内容是由0和1组成的,不同于文本文件采用ASCII码来表示字符。而文件的扩展名旨在标识文件的格式或类型,以方便操作系统和用户进行区分。 在二进制文件读写过程,我们使用函数freadfwrite。这两个函数的主要作用是读取或写入指定长度的数据,其数据以字节为单位进行操作。而文本文件读写函数是以字符为单位进行操作的。因此,如果将扩展名设置为.txt,即表示该文件是文本文件,而不是二进制文件。 由于二进制文件的特殊性,如果我们使用freadfwrite函数读写一个以.txt作为扩展名的文件时,函数会将文件内容按照字符的形式进行读写,遇到二进制数据时会引发错误,导致读取或写入的文件内容出现混乱或无法正常操作的情况。 为了避免这种错误,我们应该根据文件的实际内容和用途来选择合适的扩展名,对于二进制文件,常见的扩展名有.bin、.dat等。这样在使用freadfwrite函数读写数据时,函数会按照字节为单位进行操作,确保文件内容的准确性和完整性。 因此,为了正确读写二进制文件,我们应该将扩展名设置为与其内容类型相对应的合适的格式,切勿将二进制文件以.txt作为扩展名进行命名。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值