Wie lese ich genau 128 Bytes von einem fstream in ein String-Objekt?Wie kann ich genau 128 Bytes von einem fstream in ein String-Objekt lesen?
Ich schrieb einen Code, um die ersten 128 Bytes einer Datei zu lesen und sie und dann die letzten 128 Bytes der Datei zu drucken und das zu drucken. Der letzte Teil funktioniert, da Sie leicht zu EOF iterieren können, aber wie bekomme ich genau 128 Bytes von vorne? Der folgende Code funktioniert nicht, da Sie einem ifstream-Iterator keine 128 hinzufügen können, er ist nicht indexierbar, nur inkrementierbar (wie es scheint).
Sicher könnte ich einen Iterator machen und * ++ es 128 Mal, aber es muss eine einzige Linie direkten Weg, um es zu tun, richtig?
#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;
}
Wie wäre es mit istream :: readsome? – Chubsdad
read/readsome arbeiten nur mit char * s und Sie können kein char * (nur ein const char *) von einem String-Typ bekommen, so dass Sie nicht direkt in einen String-Typ hineinlesen können. –