Abfrage auf leeren fstream
-
Hallo !
Wie kann ich abfragen ob ein filestream (fstream) leer ist ?!
mit
fstream filestream; filestream.eof()ist nicht garantiert dass der Stream unberührt geblieben ist !
Danke und mfg
-
Du kannst mit seekg zuerst ans Ende gehen, dir diese Position ausgeben lassen mit tellg, dann kennst du die Größe, wenn diese 0 ist, ist der Stream leer.
Wobei ich diese Methode nicht für so toll halte, ich würde schauen ob boost::filesystem etwas passendes bietet (wovon ich schwer ausgehe) und ansonsten selber einen kleinen Wrapper um die Betriebssystem-API schreiben mit dem man das tun kann.
-
leon22 schrieb:
Wie kann ich abfragen ob ein filestream (fstream) leer ist ?!
ein Stream an sich kann nicht 'leer' sein, da er das Attribute 'leer' (oder voll) gar nicht hat. Er ist in dieser Hinsicht nicht mit einem Container vergleichbar.
Du kannst einen fstream zunächst abfragen, ob das Öffnen der Datei geklappt hat.
fstream file("datei.txt"); if( file.is_open() ) { // Oeffnen okMan kann abfragen ob man mit Lesen oder Schreiben am Ende des Streams angekommen ist.
if( file.eof() ) { ...Das liefert aber nur genau dann 'true' wenn man vorher über das (aktuelle!) Ende hinaus geschrieben (Fehler) oder gelesen (bedingt Fehler) hat. D.h. nach dem Öffnen einer Datei ist eof() nie 'true'.
Was willst Du denn mit der Abfrage auf 'leer' erreichen?
Gruß
Werner