Heim > Backend-Entwicklung > C++ > Wie kann ich die Größe einer Datei mit der Funktion „tellg()' von C genau bestimmen?

Wie kann ich die Größe einer Datei mit der Funktion „tellg()' von C genau bestimmen?

Barbara Streisand
Freigeben: 2024-12-09 10:00:19
Original
682 Leute haben es durchsucht

How Can I Accurately Determine a File's Size Using C  's `tellg()` Function?

tellg()-Fehlinterpretation bei der Schätzung der Dateigröße

Die tellg()-Funktion in C ist so konzipiert, dass sie einen Tokenwert zurückgibt, der einen bestimmten Wert darstellt Position innerhalb einer Datei. Dieser Wert kann verwendet werden, um später mit der Funktion seeng() zu dieser Position zurückzukehren. Es ist jedoch wichtig zu beachten, dass tellg() nicht direkt die Größe einer Datei in Bytes bereitstellt.

Im bereitgestellten Code:

void read_file(const char* name, int *size, char*& buffer) {
  ifstream file;

  file.open(name, ios::in | ios::binary);
  *size = 0;
  if (file.is_open()) {
    // Get length of file
    file.seekg(0, std::ios_base::end);
    int length = *size = file.tellg();
    file.seekg(0, std::ios_base::beg);

    // Allocate buffer in size of file
    buffer = new char[length];

    // Read
    file.read(buffer, length);
    cout << file.gcount() << endl;
  }
  file.close();
}
Nach dem Login kopieren

Der Aufruf von file.tellg() wird verwendet, um die Größe der Datei abzuschätzen. Dieser Ansatz ist jedoch falsch, da tellg() die Dateigröße nicht direkt zurückgibt.

Richtiger Ansatz zur Bestimmung der Dateigröße

Um die Größe einer Datei genau zu bestimmen in Bytes wird empfohlen, den folgenden Ansatz zu verwenden:

#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

Dieser Code liest die Datei bis zum Ende und die Funktion gcount() gibt die Datei zurück Anzahl der gelesenen Bytes. Dieser Wert stellt die tatsächliche Größe der Datei dar.

Zusätzliche Hinweise

  • Der Variablenpuffer sollte zur korrekten Darstellung als char** statt als char* deklariert werden Zeigen Sie auf ein Zeichenarray.
  • Es ist ratsam, ein std::vector zu verwenden. oder std::string, anstatt Speicher dynamisch zuzuweisen, um die Speicherverwaltung zu vereinfachen und Lecks zu vermeiden.
  • Die Schleifenbedingung in der letzten Druckschleife sollte i < sein. *Größe - 1, um ein ordnungsgemäßes Drucken bis zum Ende des Puffers sicherzustellen.

Das obige ist der detaillierte Inhalt vonWie kann ich die Größe einer Datei mit der Funktion „tellg()' von C genau bestimmen?. 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