返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C/C++读取大文件数据方式详细讲解
  • 691
分享到

C/C++读取大文件数据方式详细讲解

2024-04-02 19:04:59 691人浏览 独家记忆
摘要

目录前言第一种方法第二种方法第三种方法解决前言 以前对C语言与c++不够了解时,我无法知道如何完整获取一个文件的所有数据并且不遗漏掉。 在网络上也搜索了很多很多的相关帖子,但是没有一

前言

以前对C语言c++不够了解时,我无法知道如何完整获取一个文件的所有数据并且不遗漏掉。

网络上也搜索了很多很多的相关帖子,但是没有一个是真正有用的。

本文章使用C语言进行演示,如需使用C++的话原理为一样的。

以下列出那些没用的代码

第一种方法

// 创建一个变量,然后使用FILE指针打开一个文件
// 用fgetc函数与循环代码不断将数据读取到变量中
uint8_t data[4096];
FILE *fp = fopen("文件路径", "rb");
for(int x = 0; x < 4096; ++x) {
	data[x] = fgetc(fp);
}

这种方法的弊端是什么呢?

  1. 在不知道文件大小的情况下盲目直接读取可能会产生各种意想不到的情况。
  2. 就算知道文件大小,你难不成要每个文件都先看一眼大小?
  3. 代码量比较多且不易维护。

第二种方法

// 这个可以说也是我见到最多的方法了
// 但是这个方法真的很蠢,真的很蠢。
uint8_t data[4096];
uint8_t temp;
FILE *fp = fopen("文件路径", "rb");
int x = 0;
while((temp = fgetc(fp)) != EOF) {
	data[x] = temp;
	x++;
}

这种方法的好处比第一种要多,但是依旧很蠢。

  1. 可以通过EOF判断文件是否被“读取完毕”
  2. 不至于让指针像第一个那样乱来

坏处也很明显,此方法使用EOF而不是真正的文件终止符。

那么你在读取jpg或jpeg格式的图片文件时,你就会明白为什么这个方法蠢了。

第三种方法

// 这种方法类似于第一种方法
char data[4096];
FILE *fp = fopen("1.txt", "rb");
data = fgets(data, 文件大小, fp);

这个方法可以说是最没用的,因为它只能读取ASCII字符

大于0x7f 小于等于 0xff的数据都无法读取。

解决

// 使用fread函数与fwrite函数对文件进行操作
// 使用feof文件终止符判断文件是否已经读取完毕。
// 同时可以使用文件的偏移指针确定文件大小来决定变量该为多大
FILE *fp = fopen("image_1.jpg", "rb");
uint8_t *data = (uint8_t *)malloc(4096);
size_t fileSize;
while(!feof(fp)) {
	fileSize = fread(data, 1, 4096, fp);
}

这样便可以绝对确保文件被完整读取。

当然你可能会说这也没有把文件直接一次性读完啊?

那接下来我说的你就听好。

  • 先通过文件指针来获取文件的大小(windows端请使用64位的函数)
  • 创建一个指针,指向无符号字符类型,使用的内存大小为文件大小
  • 使用fread函数一次性读取(电脑配置不高的可能会出现假死)
  • 读取完毕之后,文件就被你一次性完全读取了。
  • 请注意你的内存情况以及磁盘空间情况,否则可能会出大问题。

到此这篇关于C/C++读取大文件数据方式详细讲解的文章就介绍到这了,更多相关C++读取大文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C/C++读取大文件数据方式详细讲解

本文链接: https://lsjlt.com/news/167461.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C/C++读取大文件数据方式详细讲解
    目录前言第一种方法第二种方法第三种方法解决前言 以前对C语言与C++不够了解时,我无法知道如何完整获取一个文件的所有数据并且不遗漏掉。 在网络上也搜索了很多很多的相关帖子,但是没有一...
    99+
    2024-04-02
  • c#读取文件详谈
    c#里面封装了几乎所有我们可以想到的和我们没有想到的类,流是读取文件的一般手段,那么你真的会用它读取文件中的数据了么?真的能读完全么? 通常我们读取一个文件使用如下的步骤: 1、声明...
    99+
    2022-11-15
    c# 读取文件
  • C/C++实现segy文件的读取详解
    目录1头文件ReadSeismic.h的编写及其规范1.1程序描述、调用、声明、定义1.2声明函数1.3完整代码2C++文件ReadSeismic.cpp的编写及其规范2.1必要的说...
    99+
    2024-04-02
  • c语言压缩文件详细讲解
    目录c语言压缩文件一、单文件压缩二、多文件压缩三、多文件异步压缩四、压缩文件夹c语言压缩文件 话说当今压缩市场三足鼎立,能叫上名号的有zip、rar、7z。其中zip是压缩界的鼻祖,...
    99+
    2024-04-02
  • C语言目标文件的详细讲解
    目录前言目标文件分类可重定位目标文件分段的优点符号和符号表符号解析重定位可执行目标文件总结 前言 一个 C 语言程序经编译器和汇编器生成可重定位目标文件,再经链接器生成可执...
    99+
    2023-01-17
    c语言目标文件是什么 c语言目标文件
  • C++读取文件的方式有哪些
    这篇文章主要讲解了“C++读取文件的方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++读取文件的方式有哪些”吧!C++可以根据不同的目的来选取文件的读取方式,目前为止学习了C++...
    99+
    2023-07-05
  • C#文件读写操作 [详细]
    C#文件读写操作 C# 中的 I/O 类FileStream 类C#中文本文件的读取写入1) StreamReader2) StreamWriter 二进制文件读写1) BinaryRe...
    99+
    2023-09-09
    c# 开发语言 java
  • C#读取txt文件数据的方法实例
    第一步新建txt文件,写入内容 我是放在D盘下的,数据以逗号隔开的,是英文逗号 第二步读取数据 在需要读取数据的页面,添加代码,就可以了 private void Phone...
    99+
    2024-04-02
  • C/C++高精度运算(大整数运算)详细讲解
    目录前言什么是大整数 大整数的表示大整数的运算1、高精度加法2、高精度减法3、高精度乘以低精度4、高精度除以低精度大整数的表示补充:使用示例总结前言 高精度的运算在算法题尤...
    99+
    2022-11-13
    c++ 高精度计算 c++高精度加法 c语言大整数运算
  • 超详细讲解C++的三种函数传递方式
    目录一、值传递二、地址传递1.指针的有关知识2.地址传递举例三、引用传递1.引用的相关知识2.引用传递举例四、三种传参方式的比较总结一、值传递 代码如下: void swap1(in...
    99+
    2024-04-02
  • C#读取文件的方法
    本篇内容介绍了“C#读取文件的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#读取文件高效方法问题的提出:你平时是怎么读取文件的?使用...
    99+
    2023-06-18
  • C++读取wav文件中的PCM数据
    前言 wav文件通常会使用PCM格式数据存储音频,这种格式的数据读取出来直接就可以播放,要在wav文件中读取数据,我们首先要获取头部信息,wav的文件结构里面分为多个chunk,我们...
    99+
    2024-04-02
  • C语言超详细讲解文件的操作
    目录一、为什么使用文件二、什么是文件1.程序文件2.数据文件3.文件名三、文件指针四、文件的打开和关闭五、文件的顺序读写六、文件的随机读写fseekftellrewind七、文件结束...
    99+
    2024-04-02
  • C++读取文件的四种方式总结
    C++可以根据不同的目的来选取文件的读取方式,目前为止学习了C++中的四种文件读取方式。 C++文件读取的一般步骤: 1、包含头文件 #include<fstream> ...
    99+
    2023-05-15
    C++实现文件读取方式 C++文件读取 C++文件
  • C#读写xml文件方法总结(超详细!)
    目录C#写入xml文件1、XmlDocument2、DataSet对象里的值来生成XML文件3、利用XmlSerializer来将类的属性值转换为XML文件的元素值。示例:写入xml...
    99+
    2023-02-21
    c#读写xml文件 c# 读xml c#读取xml文件教程
  • C++中TinyXML读取xml文件用法详解
    目录前言XML文件理解常用的XML类方法使用总结前言 TinyXML下载地址:https://sourceforge.net/projects/tinyxml/ 官方文档:TinyX...
    99+
    2024-04-02
  • Java详细讲解文件的读写操作方法
    目录java的IO字节流InputStream的常用方法OutputStream的常用方法字节流读写文件如何将数据写入到文件中java的IO Java程序允许通过流的方式与输入输出设...
    99+
    2024-04-02
  • C语言实现读取CSV文件的方法详解
    1、每一次只能读取同一种数据类型,不能读取字符串。 2、第次读取会返回一个 CSV数据结构,有源数据和二维数组,行列数信息 3、可以转换二维数组,但总大小不能变 123.csv M...
    99+
    2022-12-21
    C语言读取CSV文件 C语言读取CSV C语言 CSV
  • C++单例设计模式详细讲解
    目录特殊类设计只能在堆上创建对象的类请设计一个类只能在栈上创建对象请设计一个类不能被拷贝请设计一个类不能被继承请设计一个类只能创建一个对象(单例模式)懒汉模式和饿汉模式的对比特殊类设...
    99+
    2024-04-02
  • C++ 数据结构超详细讲解顺序表
    目录前言一、顺序表是什么概念及结构二、顺序表的实现顺序表的缺点几道练手题总结(●’◡’●) 前言 线性表是n个具有相同特性的数据元素的有限序列。线性表是一种...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作