tellg()-Missverständnis: Dateigröße melden
In Ihrem Codeausschnitt sind Sie auf ein Problem gestoßen, bei dem die tellg()-Funktion einen Wert zurückgegeben hat größer als die tatsächliche Größe der von der Funktion read() gelesenen Datei. Diese wahrgenommene Diskrepanz ergibt sich aus einem Missverständnis des Zwecks von tellg().
Tellgs Funktion
Entgegen der landläufigen Meinung liefert tellg() nicht die Größe des Datei oder der Offset vom Anfang in Bytes. Stattdessen wird ein Tokenwert zurückgegeben, ein Platzhalter, der später verwendet werden kann, um zur gleichen Position in der Datei zurückzukehren. Die tatsächlich zurückgegebene Anzahl kann je nach Betriebssystem und Dateimodus variieren.
Praktische Implementierungen
In der Praxis gibt tellg() auf Unix-Systemen den Offset in Bytes zurück , während es unter Windows den Offset nur für Dateien zurückgibt, die im Binärmodus geöffnet wurden. Für den Textmodus unter Windows spiegelt der zurückgegebene Wert möglicherweise nicht genau die Anzahl der Bytes wider, die zum Erreichen dieser Position erforderlich sind.
Genaue Bytezählung
Um die Anzahl genau zu bestimmen Bytes, die gelesen werden können, ist die einzige zuverlässige Methode die Durchführung eines Lesevorgangs. Dies kann mit einer Technik wie der folgenden erreicht werden:
#include <limits> file.ignore( std::numeric_limits<std::streamsize>::max() ); std::streamsize length = file.gcount(); file.clear(); // Since ignore will have set eof. file.seekg( 0, std::ios_base::beg );
Andere Beobachtungen
Neben dem tellg()-Problem enthält Ihr Code weitere Fehler:
Durch die Behebung dieser Probleme kann Ihr Code die Größe der Datei genau bestimmen und Führen Sie Lesevorgänge wie vorgesehen aus.
Das obige ist der detaillierte Inhalt vonWarum meldet „tellg()' die Dateigröße in C nicht genau?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!