Mit C ++ Filestreams (fstream), wie können Sie die Größe einer Datei bestimmen? [Duplikat]

StackOverflow https://stackoverflow.com/questions/2409504

  •  18-09-2019
  •  | 
  •  

Frage

    

Diese Frage bereits eine Antwort hier:

         

Ich bin sicher, dass ich dies im Handbuch gerade verpasst haben, aber wie bestimmen Sie die Größe einer Datei (in Bytes) unter Verwendung von C ++ 's istream Klasse aus dem fstream Header?

War es hilfreich?

Lösung

Sie können die Datei öffnen Sie die ios::ate Flag verwendet (und ios::binary Flag), so dass die tellg() Funktion wird Ihnen direkt die Dateigröße:

ifstream file( "example.txt", ios::binary | ios::ate);
return file.tellg();

Andere Tipps

Sie bis zum Ende suchen, dann berechnen Sie den Unterschied:

std::streampos fileSize( const char* filePath ){

    std::streampos fsize = 0;
    std::ifstream file( filePath, std::ios::binary );

    fsize = file.tellg();
    file.seekg( 0, std::ios::end );
    fsize = file.tellg() - fsize;
    file.close();

    return fsize;
}

Verwenden Sie tellg nicht die genaue Größe der Datei zu bestimmen. Die Länge von tellg bestimmt wird größer sein als die Anzahl der Zeichen aus der Datei gelesen werden.

Von Stackoverflow Frage tellg () -Funktion gibt falsche Größe der Datei? tellg berichtet nicht die Größe der Datei, noch die von Anfang an in Bytes versetzt. Es meldet einen Token-Wert, die später verwendet werden können, an der gleichen Stelle zu suchen, und nichts mehr. (Es ist nicht einmal garantiert, dass Sie den Typen zu einem integralen Typ umwandeln können.). Für Windows (und die meisten Nicht-Unix-Systeme), im Textmodus, gibt es keine direkte und unmittelbare Zuordnung zwischen dem, was tellg zurückkehrt und die Anzahl des Bytes, die Sie zu dieser Position erhalten lesen.

Wenn es wichtig ist, genau zu wissen, wie viele Bytes Sie lesen können, die einzige Möglichkeit, sicher so tun, ist durch das Lesen. Sie sollten diese in der Lage sein zu tun, mit so etwas wie:

#include <fstream>
#include <limits>

ifstream file;
file.open(name,std::ios::in|std::ios::binary);
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 );

Wie folgt aus:

long begin, end;
ifstream myfile ("example.txt");
begin = myfile.tellg();
myfile.seekg (0, ios::end);
end = myfile.tellg();
myfile.close();
cout << "size: " << (end-begin) << " bytes." << endl;

Ich bin ein Neuling, aber das ist mein Autodidakt Art und Weise, es zu tun:

ifstream input_file("example.txt", ios::in | ios::binary)

streambuf* buf_ptr =  input_file.rdbuf(); //pointer to the stream buffer

input.get(); //extract one char from the stream, to activate the buffer
input.unget(); //put the character back to undo the get()

size_t file_size = buf_ptr->in_avail();
//a value of 0 will be returned if the stream was not activated, per line 3.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top