Chciałem plik binarny wczytać do zmiennej typu
std::vector<uint8_t>
"wersja 1" (źródło stackoverflow )
std::ifstream is(tmpFilename, std::ios::binary);
std::istream_iterator<uint8_t> start(is), end;
std::vector<uint8_t> data(start, end);
Sprawdziłem na paru plikach i działało poprawnie.
Kolega zgłasza że u niego nie działa , sprawdzam pliki 1,2,3....8 wszystko działa .... plik "9" ZONK
Wszystkie pliki mam o identycznym rozmiarze (1032B) ale niektóre pliki po wczytaniu tworzą wektor o rozmiarze 1030
Wiec szukam na stackoverflow jak to zrobić inaczej : "wersja 2" i to działa poprawnie dla tych plików dla których wcześniej nie działało poprawnie
std::ifstream source(tmpFilename, std::ios::binary);
std::vector<uint8_t> data(std::istreambuf_iterator<char>(source), {});
Ale czy ta wersja jest poprawna ?
I "wersja 3" działająca ale bez użycia istreambuf_iterator
int length{0};
std::vector<uint8_t> data;
std::ifstream file(tmpFilename, std::ios::in | std::ifstream::binary);
if(file.is_open())
{
file.seekg (0, file.end);
length = file.tellg();
file.seekg (0, file.beg);
printf("%d\n",length);
data.resize(length);
file.read((char*)&data[0],length);
}