streamoff und pos_type?
-
Hallo!
Ich habe in der FAQ "Daten und Ströme" die Typdefinition streamoff gesehen. Aber was macht die genau? Und ich habe gehört das pos_type unsigned int wäre, stimmt das? Konnte dazu nichts finden. Wenn pos_type nämlich wirklich unsigned int ist, dann braucht man den ja gar nicht benutzen bei der Rückgabe des Wertes für die Dateigröße. Da ich das nicht weiß habe ich das so gemacht wie bei Strings, da soll man ja auch size_t benutzen zum ermitteln der größe.
Code-Hacker
-
Hi,
Find ich eigentlich witzig aber egal.
Es ist nun einmal so, std::istream::pos_type == unsigned int
ok, aber schau dir an was die anderen schreiben. Ich bin mir sicher das dem so ist!
cya eViLiSSiMo
-
Ich sag ja auch nichts dagegen, aber vielleicht hat jemand einen Link für mich den ich nicht gefunden habe. Außerdem interessiert mich was streamoff macht, was in der FAQ genau an der Stelle benutzt wird.
Code-Hacker
-
Das einzige was ich jetzt weiß ist das laut sizeof pos_type 24 Byte hat.
Code-Hacker
-
std::istream::pos_type == implementierungsspezifisch ?
-
Und ich habe gehört das pos_type unsigned int wäre, stimmt das?
Nein. Stimmt nicht. pos_type ist hier ein Synonym für streampos was wiederum ein Synonym für fpos< mbstate_t> ist. fpos ist eine Template-Klasse deren Objekte alle Informationen speichern, die für die Wiederherstellung einer beliebigen File-Position in einem Stream nötig sind ( pos_type ist also weit mehr als ein unsigned int. Bei den alten Streams war pos_type aber in der Tat mal ein typedef für ein unsigned long.
Ein streampos (pos_type) ist in ein streamoff konvertierbar. Und ein streamoff ist häufig ein signed integer. Es muss aber kein numerischer Typ. Desweiteren muss die Konvertierung auch nicht implizit sein.
Letztlich heißt das: Das was in den FAQs steht ist *keine* Standard-C++ Methode um die Dateigröße einer Datei zu bestimmen. Eine solche Methode gibt es auch nicht. Das einzige was wirklich Standard ist, wäre die Datei von vorne nach hinten zu lesen und dabei jedes einzelne Zeichen zu zählen.
Unter gängigen Systemen ist die Variante aber ok, sofern man nicht mit Dateien größer 4 GB rumhantiert