Hi,
I am having a hard time finding the cleanest solution for the following problem.
I want to read a binary file into an std::vector.
Checking online I found the following solution:
Code:
ifstream infile(filename, std::ifstream::binary);
infile.seekg(0, infile.end); //N is the total number of doubles
N = infile.tellg();
infile.seekg(0, infile.beg);
std::vector<double> buf(N / sizeof(double));// reserve space for N/8 doublesinfile.read(reinterpret_cast<char*>(buf.data()), buf.size()*sizeof(double));
which works just fine if my data is an array of doubles, but that can generate problems when used with user defined structs. In particular problems may arise because of a mismatch in the alignment of the data in the binary file and in the vector.
In particular my binary file contains an array of the following type:
Code:
struct NormalizedPair
{
uint32_t ID1;
uint32_t ID2;
double distance;
NormalizedPair()=default;
NormalizedPair(uint32_t id1, uint32_t id2, double d): ID1(id1), ID2(id2), distance(d) {}
};
Is there a universal approach to solve this?
should I use a dedicated library? I am handling large binary files (~tens of GB),
I looked everywhere but cannot find a 100% correct solution for what it seems a trivial problem of loading a file into a container.
Thanks in advance!