当前位置: 首页 > news >正文

如何进行二进制文件的读写操作?

在C语言中,进行二进制文件的读写操作是非常常见的任务,尤其在处理文件、图像、音频和视频等二进制数据时。本文将详细介绍如何进行二进制文件的读写操作,包括如何打开文件、读取文件、写入文件以及关闭文件。我们将使用标准C库中的函数来执行这些操作。

打开二进制文件

在进行二进制文件的读写操作之前,首先需要打开文件。在C语言中,可以使用fopen函数来打开文件。下面是fopen函数的基本用法:

FILE *fopen(const char *filename, const char *mode);
  • filename 是要打开的文件的名称,可以包括完整路径。
  • mode 是文件打开模式,包括 "r"(读取)、"w"(写入)、"a"(追加)、"rb"(二进制读取)、"wb"(二进制写入)等。对于二进制文件的读写,通常使用带有 "b" 后缀的模式。

以下是一个示例,演示如何打开一个二进制文件以进行读取:

#include <stdio.h>int main() {FILE *file;file = fopen("binary_file.bin", "rb"); // 以二进制读取模式打开文件if (file == NULL) {perror("Error opening file");return 1;}// 文件已成功打开,进行读取操作fclose(file); // 关闭文件return 0;
}

在示例中,我们使用了 "rb" 模式来以二进制读取方式打开文件 "binary_file.bin"。如果文件打开成功,fopen 函数将返回一个指向 FILE 结构的指针,否则返回 NULL。在打开文件后,我们可以进行读取操作。

读取二进制文件

一旦打开了二进制文件,就可以使用不同的函数来读取文件中的数据。最常见的函数是fread,它用于从文件中读取二进制数据。以下是fread 函数的基本用法:

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
  • ptr 是一个指向用于存储数据的内存缓冲区的指针。
  • size 是每个数据项的字节数。
  • count 是要读取的数据项的数量。
  • stream 是指向已打开文件的指针。

fread 函数返回成功读取的数据项数量。通常,您可以使用sizeof操作符来计算size参数,以确保正确地读取所需数量的数据项。

以下是一个示例,演示如何使用fread函数从二进制文件中读取数据:

 
#include <stdio.h>int main() {FILE *file;file = fopen("binary_file.bin", "rb");if (file == NULL) {perror("Error opening file");return 1;}// 读取10个整数(每个整数占4字节)int data[10];size_t items_read = fread(data, sizeof(int), 10, file);if (items_read != 10) {perror("Error reading file");return 1;}// 处理读取的数据fclose(file); // 关闭文件return 0;
}

在示例中,我们打开了一个文件并使用fread函数从中读取了10个整数。fread函数将数据读取到名为 data 的整数数组中。

写入二进制文件

除了读取,您还可以使用不同的函数来将数据写入二进制文件。最常见的函数是fwrite,它用于将数据写入文件。以下是fwrite 函数的基本用法:

size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
  • ptr 是一个指向包含要写入文件的数据的内存缓冲区的指针。
  • size 是每个数据项的字节数。
  • count 是要写入的数据项的数量。
  • stream 是指向已打开文件的指针。

fwrite 函数返回成功写入的数据项数量。同样,您可以使用sizeof操作符来计算size参数,以确保正确地写入所需数量的数据项。

以下是一个示例,演示如何使用fwrite函数将数据写入二进制文件:

#include <stdio.h>int main() {FILE *file;file = fopen("binary_file.bin", "wb"); // 以二进制写入模式打开文件if (file == NULL) {perror("Error opening file");return 1;}// 要写入的数据int data[] = {1, 2, 3, 4, 5};size_t items_written = fwrite(data, sizeof(int), 5, file);if (items_written != 5) {perror("Error writing file");return 1;}fclose(file); // 关闭文件return 0;
}

在示例中,我们打开了一个文件并使用fwrite函数将一个整数数组写入文件。fwrite函数将数组中的数据写入文件,每个整数占4字节。

关闭二进制文件

在完成二进制文件的读写操作后,务必关闭文件,以释放文件资源并确保数据已被刷新到磁盘。要关闭文件,可以使用fclose函数,如下所示:

int fclose(FILE *stream);
  • stream 是指向已打开文件的指针。

以下是一个示例,演示如何关闭二进制文件:

#include <stdio.h>int main() {FILE *file;file = fopen("binary_file.bin", "rb");if (file == NULL) {perror("Error opening file");return 1;}// 读取文件数据fclose(file); // 关闭文件return 0;
}

在示例中,我们使用fclose函数关闭了已打开的二进制文件。关闭文件后,不能再执行文件的读写操作。

错误处理

在进行二进制文件的读写操作时,要时刻注意错误处理。打开文件、读取数据和写入数据都可能导致错误。为了有效地处理错误,可以使用perror函数来输出错误信息,或使用errno全局变量来获取错误代码。

以下是一个示例,演示如何使用perror函数来处理文件操作中的错误:

#include <stdio.h>
#include <errno.h>int main() {FILE *file;file = fopen("non_existent_file.bin", "rb");if (file == NULL) {perror("Error opening file");printf("Error code: %d\n", errno);return 1;}// 读取文件数据fclose(file); // 关闭文件return 0;
}

在示例中,我们故意尝试打开一个不存在的文件,并使用perror函数输出错误信息和errno变量来获取错误代码。这有助于识别问题并进行适当的错误处理。

总结

进行二进制文件的读写操作是C语言中的常见任务。在处理文件时,您需要打开文件、读取数据、写入数据和关闭文件。使用标准C库函数,如fopenfreadfwritefclose,您可以轻松地执行这些操作。同时,要时刻注意错误处理,以确保文件操作不出现问题。二进制文件的读写操作是处理各种文件和数据的关键部分,掌握这些技巧对于C程序员来说非常重要。希望这篇文章对您有所帮助。

相关文章:

如何进行二进制文件的读写操作?

在C语言中&#xff0c;进行二进制文件的读写操作是非常常见的任务&#xff0c;尤其在处理文件、图像、音频和视频等二进制数据时。本文将详细介绍如何进行二进制文件的读写操作&#xff0c;包括如何打开文件、读取文件、写入文件以及关闭文件。我们将使用标准C库中的函数来执行…...

python实现PDF表格与文本分别导出EXCEL

现需将pdf 转换至Excel &#xff0c; 目前实现方式&#xff1a;将PDF的TABLE部分与 非 TABLE部分分别导出至Excel两个sheet中 1&#xff09;、识别PDF中的表格块 2&#xff09;、将PDF转换为Word格式 3&#xff09;、提取Word中非表格的文本数据 4&#xff09;、对文本与表格重…...

Java开发-WebSocket

WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工通信-浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c;并实现 双向数据传输。 使用 导入maven坐标 <dependency><groupId>org.springframework.bo…...

SpringDoc API文档工具集成SpringBoot - Swagger3

1、引言 之前在Spring Boot项目中一直使用的是SpringFox提供的Swagger库&#xff0c;发现已经超过3年没出新版本了&#xff01;SpringDoc是一款可以结合Spring Boot使用的API文档生成工具&#xff0c;基于OpenAPI 3&#xff0c;是一款更好用的Swagger库&#xff01;值得一提的是…...

Java将djvu文件转成pdf

需求来源 迫于有部分资源是djvu格式的文件&#xff0c;需要预览这部分文件&#xff0c;web端无法直接预览djvu&#xff0c;所以需要将djvu转成pdf。 转换方法 简单来说就是先把djvu文件转换成tiff文件&#xff0c;再将tiff文件转换成pdf文件。 Ubuntu服务器 如果服务器是U…...

【机器学习合集】激活函数合集 ->(个人学习记录笔记)

文章目录 综述1. S激活函数(sigmoid&Tanh)2. ReLU激活函数3. ReLU激活函数的改进4. 近似ReLU激活函数5. Maxout激活函数6. 自动搜索的激活函数Swish 综述 这些都是神经网络中常用的激活函数&#xff0c;它们在非线性变换方面有不同的特点。以下是这些激活函数的主要区别&am…...

【从0到1设计一个网关】什么是网关?以及为什么需要自研网关?

文章目录 什么是网关&#xff1f;网关类型网关的优缺点目前的网关解决方案有哪些&#xff1f;为什么要自研Gateway网关&#xff1f;自研网关需要注意什么&#xff1f; 注&#xff1a; 这篇文章作为我的网关的第一篇文章&#xff0c;并不涉及任何代码&#xff0c;只是提及了网关…...

Tp框架如何使用事务和锁,还有查询缓存

1.事务 在ThinkPHP框架中&#xff0c;可以使用think\db\Transaction类来实现事务。 use think\Db; use think\db\Transaction;// 开始事务 Db::startTrans();try {// 执行数据库操作Db::table(user)->where(id, 1)->update([name > John]);// 提交事务Db::commit(); }…...

Java IDEA feign调用上传文件MultipartFile以及实体对象亲测可行

Java IDEA feign调用上传文件MultipartFile以及实体对象亲测可行 1. 报错 java.lang.IllegalStateException: Body parameter cannot be used with form parameters2. 解决参考 1. 报错 java.lang.IllegalStateException: Body parameter cannot be used with form parameters …...

【产品经理】APP备案(阿里云)

工信部《关于开展移动互联网应用程序备案工作的通知》 工业和信息化部印发了《关于开展移动互联网应用程序备案工作的通知》&#xff0c;“在中华人民共和国境内从事互联网信息服务的App主办者&#xff0c;应当依照相关法律法规等规定履行备案手续&#xff0c;未履行备案手续的…...

Overmind VS Redux

Overmind Overmind 是一个状态管理库&#xff0c;它可以帮助你管理应用程序的状态和副作用。下面是一个使用 Overmind 的简单示例&#xff1a; 首先&#xff0c;我们需要安装 Overmind 和它的 React 绑定&#xff1a; npm install overmind overmind-react然后&#xff0c;我…...

0基础学习PyFlink——流批模式在主键上的对比

假如我们将《0基础学习PyFlink——使用PyFlink的Sink将结果输出到外部系统》中的模式从批处理&#xff08;batch&#xff09;改成流处理&#xff08;stream&#xff09;&#xff0c;则其在print连接器上产生的输出是不一样。 批处理 env_settings EnvironmentSettings \.new_…...

Java学习笔记(五)——数组、排序和查找

一、数组 &#xff08;一&#xff09;数组的使用 1、使用方式1——动态初始化 2、使用方式2——动态初始化 3、使用方式3——静态初始化 &#xff08;二&#xff09;数组使用注意事项和细节 &#xff08;三&#xff09;数组赋值机制 &#xff08;四&#xff09;数组拷贝…...

python输出与数据类型

目标 1、使用print输出内容 2、熟悉字符串类型 3、熟悉数字类型 4、熟悉数字与字符串操作 输出 print可控制输出内容也可配合、-、*、/进行运算&#xff0c;和整数型配合可进行运算和字符型配合有不同效果&#xff0c;如为拼接&#xff0c;*为多次输出注&#xff1a;整数型如&…...

React-Redux总结含购物车案例

React-Redux总结含购物车案例 reduc简介 redux是react全家桶的一员&#xff0c;它为react给i共可预测化的状态管理机制。redux是将整个应用状态存储到一个地方&#xff0c;成为store,里面存放着一颗树状态(state,tree),组件可以派发dispatch行为action给store,而不是直接通知其…...

攻克组合优化问题!美国DARPA选中全栈量子经典计算公司Rigetti

&#xff08;图片来源&#xff1a;网络&#xff09; 近日&#xff0c;美国量子计算公司Rigetti宣布&#xff0c;它被美国国防高级研究计划局 (DARPA) 选中&#xff0c;加入想象未来量子实际应用 (IMPAQT) 计划&#xff0c;推进先进量子算法的研发&#xff0c;去解决组合优化问…...

Kafka - 深入了解Kafka基础架构:Kafka的基本概念

文章目录 Kafka的基本概念 Kafka的基本概念 我们首先了解一些Kafka的基本概念。 1&#xff09;Producer &#xff1a;消息生产者&#xff0c;就是向kafka broker发消息的客户端2&#xff09;Consumer &#xff1a;消息消费者&#xff0c;向kafka broker获取消息的客户端3&…...

[Docker]二.Docker 镜像,仓库,容器介绍以及详解

一.Docker 镜像,容器,仓库的简单介绍 通俗来讲:镜像相当于VM虚拟机中的ios文件,容器相当于虚拟机系统,仓库相当于系统中的进程或者执行文件,容器是通过镜像创建的 1.镜像 Docker 镜像就是一个 Linux 的文件系统&#xff08; Root FileSystem &#xff09;&#xff0c;这个文…...

软考高级系统架构设计师系列之:案例分析典型试题一

软考高级系统架构设计师系列之:案例分析典型试题一 一、案例分析考试大纲二、结构化软件系统建模1.案例试题2.案例试题分析3.案例试题参考答案三、联合需求分析会议1.案例试题2.案例试题分析3.案例试题参考答案四、电子政务1.案例试题2.案例试题分析3.案例试题参考答案五、软件…...

2023年5个美国代理IP推荐,最佳代理花落谁家?

美国代理IP指的是代理服务器位于美国的IP地址&#xff0c;对于跨境业务来说&#xff0c;这些代理IP地址可以用于隐藏用户的真实IP地址&#xff0c;将其网络流量路由通过美国的服务器&#xff0c;以实现一些特定的目的。由于近年来&#xff0c;面向美国市场的跨境商家越来越多&a…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

【实施指南】Android客户端HTTPS双向认证实施指南

&#x1f510; 一、所需准备材料 证书文件&#xff08;6类核心文件&#xff09; 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...