Nicht binäre Datei in einem Zug auslesen
-
Hallo!
Ich hab eine ganz normale Textdatei und will sie nicht zeilenweise auslesen o.ä. sondern sie direkt in einen std::string laden.
Ich bekomm das irgndwie nicht hin, dass muss doch ein einfacher 2-Zeiler sein?
-
Du könntest es in einen C-String bzw. ein char Array einlesen und dann in einen std::string kopieren.
-
// sei f der stream // größe ermitteln f.seekg(0, ios::end); size_t size = f.tellg(); f.seekg(0, ios::beg); // datei einlesen vector<char> buffer(size); f.read(&buffer[0], size); // 1. mit buffer direkt arbeiten, oder: // 2. nullbyte anhängen und &buffer[0] als zeiger auf string-daten benutzen, oder: buffer.push_back('\0'); // 3. in string kopieren string data(buffer.begin(), buffer.end());
-
Option2 ist sehr sehr schlecht, da std::string keine 0 zur Terminierung benötigt und somit ein gültiger String in der Datei auch die 0 enthalten könnte.
Ein String muss nicht notwendigerweise ein für den Menschen lesbarer Text sein.
-
Tippgeber schrieb:
Option2 ist sehr sehr schlecht, da std::string keine 0 zur Terminierung benötigt und somit ein gültiger String in der Datei auch die 0 enthalten könnte.
Ein String muss nicht notwendigerweise ein für den Menschen lesbarer Text sein.Das hatte ich absichtlich nicht berücksichtigt, da der OP explizit von "nicht binärer Datei" sprach (dasselbe Problem würde beim Einlesen via getline ja auch auftreten). Grundsätzlich hast Du natürlich vollkommen Recht.