目录前言第一种方法第二种方法第三种方法解决前言 以前对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);
}
这种方法的弊端是什么呢?
// 这个可以说也是我见到最多的方法了
// 但是这个方法真的很蠢,真的很蠢。
uint8_t data[4096];
uint8_t temp;
FILE *fp = fopen("文件路径", "rb");
int x = 0;
while((temp = fgetc(fp)) != EOF) {
data[x] = temp;
x++;
}
这种方法的好处比第一种要多,但是依旧很蠢。
坏处也很明显,此方法使用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);
}
这样便可以绝对确保文件被完整读取。
当然你可能会说这也没有把文件直接一次性读完啊?
那接下来我说的你就听好。
到此这篇关于C/C++读取大文件数据方式详细讲解的文章就介绍到这了,更多相关C++读取大文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: C/C++读取大文件数据方式详细讲解
本文链接: https://lsjlt.com/news/167461.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0