Come faccio a leggere esattamente 128 byte da un flusso in un oggetto stringa?Come posso leggere esattamente 128 byte da un flusso in un oggetto stringa?
Ho scritto un codice per leggere i primi 128 byte di un file e stamparlo e quindi gli ultimi 128 byte del file e stamparlo. L'ultima parte funziona, dal momento che si può facilmente iterare a EOF, ma come faccio a ottenere esattamente 128 byte dal fronte? Il codice sottostante non funziona poiché non è possibile aggiungere 128 a un iteratore ifstream, non è indicizzabile, solo incrementabile (sembra).
Certo, potrei fare un iteratore e * + + 128 volte, ma ci deve essere una linea semplice per farlo, giusto?
#include <iostream>
#include <fstream>
#include <string>
int main(int argc, char **argv)
{
std::ifstream ifs ("input.txt",std::ifstream::in | std::ifstream::binary);
if (ifs.good())
{
// read first 128 bytes into a string
ifs.seekg(0,std::ifstream::beg);
std::string first128((std::istreambuf_iterator<char>(ifs)),
(std::istreambuf_iterator<char>(ifs))+128);
std::cout << first128 << std::endl;
// read last 128 bytes into a string
ifs.seekg(-128,std::ifstream::end);
std::string last128((std::istreambuf_iterator<char>(ifs)),
std::istreambuf_iterator<char>());
std::cout << last128 << std::endl;
return 0;
}
return 1;
}
Che ne dici di istream :: readsome? – Chubsdad
read/readsome funziona solo su char * s e non è possibile ottenere un char * (solo un const char *) da un tipo di stringa, quindi non è possibile leggere direttamente in un tipo di stringa. –