Ich bin sicher, ich habe gerade dies im Handbuch verpaßt, aber wie bestimmen Sie die Größe einer Datei (in Bytes) unter Verwendung von C++ 's istream
Klasse aus dem fstream
Header?Wie können Sie mithilfe von C++ - Dateiströmen (fstream) die Größe einer Datei bestimmen?
Antwort
Sie die Datei öffnen können mit der ios::ate
Flag (und ios::binary
Flagge), so dass die tellg()
Funktion gibt Ihnen direkt die Dateigröße:
ifstream file("example.txt", ios::binary | ios::ate);
return file.tellg();
@Dominik Honnef: in VS 2013 Update5 64 Bit dieser Ansatz, mit _ios: ate_flag und ohne _seekg (0, ios: end) _ möglicherweise nicht für große Dateien. Weitere Informationen finden Sie unter http://stackoverflow.com/questions/32057750/how-to-get-the-filesize-for-large-files-in-c. –
Dies scheint nicht ein guter Ansatz zu sein. [tellg meldet weder die Größe der Datei noch den Offset vom Anfang in Bytes] (http://stackoverflow.com/a/22986486/1835769). – displayName
@displayName [cplusplus.com] (http://www.cplusplus.com/reference/istream/istream/seekg/) stimmt dieser Aussage nicht zu: Es verwendet tatsächlich 'tellg()', um Dateigröße zu erkennen. –
Sie bis zum Ende suchen können, berechnen dann 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;
}
So:
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;
Vielleicht möchten Sie die geeignetere 'std :: streampos' anstelle von' long' verwenden, da die letztere einen so großen Bereich wie die vorherige nicht unterstützt - und 'streampos' * ist * mehr als nur eine Ganzzahl. –
Ich bin ein Neuling, aber das ist mein Autodidakt Art und Weise 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.
all dies ist bestimmt, ob es ein erstes Zeichen gibt. Wie hilft das? – warren
nicht tellg
Verwenden Sie die genaue Größe der Datei zu bestimmen. Die von tellg
festgelegte Länge ist größer als die Anzahl der Zeichen, die aus der Datei gelesen werden können.
Von stackoverflow Frage tellg() function give wrong size of file?tellg
meldet nicht die Größe der Datei, noch der Offset vom Anfang in Bytes. Es meldet einen Token-Wert, der später verwendet werden kann, um an denselben Ort zu suchen, und nicht mehr. (Es ist nicht einmal garantiert, dass Sie den Typ in einen ganzzahligen Typ konvertieren können.). Für Windows (und die meisten Nicht-Unix-Systeme) gibt es im Textmodus keine direkte und direkte Zuordnung zwischen der Rückgabe von tallg und der Anzahl von Bytes, die Sie lesen müssen, um an diese Position zu gelangen.
Wenn es wichtig ist, genau zu wissen, wie viele Bytes Sie lesen können, die einzige Möglichkeit, sicher so tun, ist durch Lesen. Sie sollten dies wie mit etwas zu tun in der Lage:
#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);
- 1. Bestimmen Sie die Größe eines InputStream
- 2. Bestimmen Sie die Anzahl der Seiten in einer PDF-Datei
- 3. Bestimmen Sie die Größe von Groove Workspaces programmgesteuert?
- 4. Erstellen fstream Objekt aus einer Datei * pointer
- 5. Wie erzwinge C++ fstream erstellen Datei ohne Append-Modus?
- 6. fstream wird keine Datei erstellen
- 7. Wie erhalten Sie die Größe einer Datei in Elixir?
- 8. Wie erhalten Sie die Größe einer Datei in MATLAB?
- 9. fstream Fehler in C++
- 10. C++ - fstream und ofstream
- 11. C++ fstream überschreiben statt anhängen
- 12. Datei bestimmen, die von FileHandler verwendet wird
- 13. Wie Sie den WebSphere MQ-Kanaltabellenspeicherort für die .net-Webanwendung mithilfe von web.config angeben können
- 14. Lesen von Zahlen aus einer * .txt-Datei in C++ mit fstream
- 15. Wie können Sie Oberflächenpunkte eines 3D-Objekts bestimmen und extrahieren?
- 16. Wie lese ich spezifische Datei fstream?
- 17. Wie können Sie div Tags mithilfe von JavaScript verbergen/anzeigen?
- 18. Bestimmen Sie die Framework-Aktion von Router
- 19. Fehler: initializer versagt Größe von ‚K‘ bestimmen
- 20. So ändern Sie die Größe einer Ansicht mithilfe des automatischen Layouts von Xcode
- 21. In Qt, wie die Größe des Bildschirms zu bestimmen?
- 22. So erhalten Sie DB2-Tabellendetails mithilfe von C#
- 23. C++ Senden von Referenz fstream zu Klassenmember Funktionsproblem
- 24. Wie Sie mehrere Dateien in C mithilfe von Platzhaltern entfernen?
- 25. Wie mithilfe von asp.net C#
- 26. Können Sie eine C# DLL von einer C DLL aufrufen?
- 27. So finden Sie die Größe einer HDFS-Datei
- 28. Bestimmen Sie die ContentObserver
- 29. verkleinern die Größe einer PNG-Datei
- 30. Lesen von Zeilen fester Größe aus einer Datei in c
http://stackoverflow.com/questions/2282549/c-getting-incorrect-file-size/2289423#2289423 –