c++ 读取文件遇到的一个问题

Posted wangli1392781

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 读取文件遇到的一个问题相关的知识,希望对你有一定的参考价值。

今天同学问到一个问题:

下面的代码  int len = fin.tellg();

放在一个函数里用了好几年都没问题,就是最近发现出问题了。

原因:文件过大 超过了2G    读出来的文件大小 超过int表示的最大值   int溢出

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <assert.h>

using namespace std;

int main() {
    int len = sizeof(unsigned int)*3 + sizeof(char);
    printf("len:%d\n", len);

    ifstream in("test.txt");
    int len2 = in.tellg();
    printf("%d", len2);
    return 0;
}

 文件test.txt 不存在 返回 -1        test.txt 文件为空 返回-1

解决:定义成streampos  或者len改为一个范围更大的类型 例如 unsigned long long之类

 

以上是关于c++ 读取文件遇到的一个问题的主要内容,如果未能解决你的问题,请参考以下文章

将结构写入二进制文件 C++ 时遇到问题

在 C++ 中读取顺序文件时出错

读取 .csv 文件 C++ 时的 Atoi 函数

严重包含在字符串中,除非我将它存储在 C++ 类中

C++ 代码片段执行

使用 fbx sdk c++ 从 fbx 读取纹理文件名