gpt4 book ai didi

c++ - seekg,大文件失败

转载 作者:行者123 更新时间:2023-11-28 06:33:41 25 4
gpt4 key购买 nike

我有一个非常大的 (950GB) 二进制文件,我在其中存储了 10 亿个 float 序列。

我拥有的长度为 3 的文件类型的一个小例子可能是:

-3.456 -2.981 1.244
2.453 1.234 0.11
3.45 13.452 1.245
-0.234 -1.983 -2.453

现在,我想读取一个特定序列(假设索引为 2 的序列,因此是我文件中的第 3 个序列),所以我使用以下代码:

#include <iostream>
#include <fstream>
#include <stdlib.h>

using namespace std;

int main (int argc, char** argv){

if(argc < 4){
cout << "usage: " << argv[0] << " <input_file> <length> <ts_index>" << endl;
exit(EXIT_FAILURE);
}

ifstream in (argv[1], ios::binary);
int length = atoi(argv[2]);
int index = atoi(argv[3]);

float* ts = new float [length];

in.clear();
**in.seekg(index*length*sizeof(float), in.beg);**
if(in.bad())
cout << "Errore\n";
**// for(int i=0; i<index+1; i++){**
in.read(reinterpret_cast<char*> (ts), sizeof(float)*length);
**// }**
for(int i=0; i<length; i++){
cout << ts[i] << " ";
}

cout << endl;
in.close();
delete [] ts;
return 0;
}

问题是,当我使用 seekg 时,某些索引的读取失败并且我得到了错误的结果。如果我按顺序读取文件(不使用 seekg)并打印出想要的序列,我总能得到正确的结果。

一开始我想到了seekg溢出(因为字节数可以很大),但是我看到seekg输入的是一个streamoff类型,非常大(billions of billions)。

最佳答案

换行

in.seekg(index*length*sizeof(float), in.beg);

进入

in.seekg((streamoff)index*length*sizeof(float), in.beg);

解决了问题。

关于c++ - seekg,大文件失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27127242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com