Ich bin ziemlich vertraut mit den meisten C++, aber ein Bereich, den ich vermieden habe, war IO-Streams, vor allem, weil ich es auf Embedded-Systemen verwendet habe Sie sind nicht angemessen. Vor kurzem musste ich mich jedoch mit ihnen vertraut machen, und ich kämpfe darum, etwas herauszufinden, das meiner Meinung nach einfach sein sollte.Lesen einer bestimmten Anzahl von Zeichen aus C++ Stream in Std :: String
Was ich suche nach einer relativ effizienten Möglichkeit, eine feste Anzahl von Zeichen aus einem C++ - Stream in eine std::string
zu lesen. Ich könnte leicht in eine temporäre char
-Array mit der read()
-Methode lesen und diese in eine std::string
konvertieren, aber das ist ziemlich hässlich und beinhaltet eine verschwenderische Kopie.
std::string getFile(std::fstream &inFile)
{
std::stringstream buffer;
buffer << inFile.rdbuf();
return buffer.str();
}
... aber unbegrenzt liest in den Speicher sind in der Regel eine schlechte Idee, so würde ich die Datei wirklich einen Block zugreifen möchte: Ich könnte auch mit so etwas wie dies die Gesamtheit eines Stroms in einen String gelesen zu einer Zeit sage 4K oder so. Ich könnte auch Zeichen auf einmal lesen, aber das fühlt sich einfach hässlicher und weniger effizient an als das Lesen in ein temporäres Array.
Also, gibt es einen einfachen Weg, um eine std::string
direkt aus einem Strom, der die nächsten N Zeichen aus dem Strom enthält? Es mag gut sein, dass es dazu einfach keinen Weg gibt, aber es erscheint mir komisch, dass so etwas fehlen würde, so dass ich das Gefühl hatte, etwas ganz offensichtlich zu verpassen.
Übrigens, ich bin ziemlich vertraut mit den C-File-IO-APIs und ich bin nicht auf der Suche nach einer Lösung mit ihnen. Ich könnte etwas mit read()
und write()
klopfen, aber der Code, mit dem ich arbeite, verwendet Streams und ich denke, es ist gute Praxis, meine Code-Ergänzungen in einem einheitlichen Stil zu halten.
Siehe [diese] (http://stackoverflow.com/questions/9521629/stdstringss-capacity-reserve-resize-functions) und [dies] (http://stackoverflow.com/questions/14286526/the-usage -of-stringReserve). –