Heim > Backend-Entwicklung > C++ > Warum meldet „tellg()' die Dateigröße in C nicht genau?

Warum meldet „tellg()' die Dateigröße in C nicht genau?

Barbara Streisand
Freigeben: 2024-12-02 20:56:11
Original
130 Leute haben es durchsucht

Why Does `tellg()` Not Accurately Report File Size in C  ?

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 );
Nach dem Login kopieren

Andere Beobachtungen

Neben dem tellg()-Problem enthält Ihr Code weitere Fehler:

  1. Die Zeile „buffer = new char[length];“ sollte sein „*buffer = new char[length];“ um einen Zeiger auf ein Array von Zeichen zuzuweisen.
  2. Die Schleifenbedingung in der zweiten for-Schleife sollte while ( file.get( buffer[i] ) ) für das zeichenweise Lesen sein.
  3. Für den Fall, dass das Öffnen der Datei fehlschlägt, sollte eine Fehlerbehandlung implementiert werden.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage