1. 程式人生 > >c++ 讀取文件遇到的一個問題

c++ 讀取文件遇到的一個問題

問題 ostream fstream 最大值 最大 同學 讀取文件 一個 fst

今天同學問到一個問題:

下面的代碼 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++ 讀取文件遇到的一個問題