Comment lire exactement 128 octets d'un fstream dans un objet chaîne?comment puis-je lire exactement 128 octets d'un fstream dans un objet chaîne?
J'ai écrit du code pour lire les 128 premiers octets d'un fichier et l'imprimer, puis les 128 derniers octets du fichier et l'imprimer. La dernière partie fonctionne, puisque vous pouvez facilement parcourir jusqu'à EOF, mais comment puis-je obtenir exactement 128 octets de l'avant? Le code ci-dessous ne fonctionne pas puisque vous ne pouvez pas ajouter 128 à un itérateur ifstream, ce n'est pas indexable, seulement incrémentable (il semble).
Bien sûr, je pourrais faire un itérateur et * ++ 128 fois, mais il doit y avoir une seule ligne simple pour le faire, non?
#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;
}
Qu'en est-il de istream :: readsome? – Chubsdad
read/readsome ne fonctionne que sur char * s et vous ne pouvez pas obtenir un char * (seulement un const char *) d'un type de chaîne, donc vous ne pouvez pas lire directement dans un type de chaîne avec eux. –