std::vector.data(): использование в ifstream

Как использовать vector.data() в ifstream?

std::ifstream file(fileAdrress, std::ios::in | std::ios::binary);
std::vector<unsigned char> block;

Так?

file.read(reinterpret_cast<char*>(block.data()), allocateSize);

Или как?


Ответы (1 шт):

Автор решения: Chorkov

Все правильно, но есть тонкости:

std::ifstream file(fileAdrress, std::ios::in | std::ios::binary);
std::vector<unsigned char> block;


block.resize(allocateSize); // Важно! data() не аллоцирует память.
file.read(reinterpret_cast<char*>(block.data()), allocateSize );
if(!file) // EOF! прочитали только часть блока.
    block.resize( file.gcount() );

Если смущает cast, то, смените хранимый в vector тип:

std::vector<char> block;
...
file.read( block.data(), block.size() );
...
→ Ссылка