The Incredible Fufialk Geschrieben 23. Mai 2005 Geschrieben 23. Mai 2005 Hallo, Will für mein C++ Programm eine simple Fortschrittsanzeige einbauen, damit meine Kollegen sehen, wie weit sie sind. Das Programm selbst liest Daten aus einer Binärdetai in ein und schreibt diese dann in eine Textdatei. Dazu läuft einfach nur eine Schleife durch. Mit Hilfe des Schleifenzählers, will ich nun den Fortschritt des Prozesses berechnen. Dazu muss ich vorher die genaue Größe meiner Datei in Byte berechnen bzw. auslesen. Hier im Forum habe ich schon den Thread http://forum.fachinformatiker.de/showthread.php?postid=173950&highlight=Dateigr%F6%DFe#post173950 gefunden, allerdings bringt mich das nicht so richtig weiter. Da ich nach der Zeile: int stat(const char *fileread, struct stat *buf); Weder die Adresse der Zeiger, geschweige denn deren Werte auslesen kann. Kann mir jemand winen Tip geben, wie ich dort anknüpfen sollte? Ist dabei der Dateiname der einzulesenden Datei. Die Auswahl erfolgt über: cout << "\n\nGeben Sie den Dateinamen der zu bearbeitenden Datei ein: "; cin.getline(fileread, 64); while (cin.get() !='\n'); // Tastaturpuffer leeren für Schleife bei falscher Eingabe ifstream ifl(fileread, ios::in|ios::binary); //öffnen der Datei zur Eingabe im Binärmodus if (!ifl) Zitieren
Guybrush Threepwood Geschrieben 23. Mai 2005 Geschrieben 23. Mai 2005 Was genau ist denn dein Problem mit stat? Hast du dir schonmal die Dokumentation zu dem Befehl angeguckt? Zitieren
The Incredible Fufialk Geschrieben 23. Mai 2005 Autor Geschrieben 23. Mai 2005 Die Funktion tauchte in meiner Literatur gar nicht auf. Deswegen bin ich jetzt einfach davon ausgegangen, das es sich um eine Variable handelt, in die die Größe der Datei eingelesen wird. Ich spinne jetzt mal den Faden weiter, und probiere folgendes aus. Zunächst muss ich also die Bibliotheken stat.h und types.h in mein Projekt über #include einfügen. Und danach muss ich die Variable off_t für die Berechnung nutzen, also: int stat(const char *fileread, struct stat *buf); int groesse = &stat.off_t Zitieren
Delryn Geschrieben 23. Mai 2005 Geschrieben 23. Mai 2005 So würde ichs machen: ifstream file("deinedatei"); file.seekg(0, ios::end); unsigned long byte= streamoff(file.tellg()); Und danach eben for (string line; getline(file, line); ) { // Pseudocode // ( line.tellp() / (byte/100)) // zeile in neue datei schreiben } Zitieren
The Incredible Fufialk Geschrieben 23. Mai 2005 Autor Geschrieben 23. Mai 2005 Habs jetzt gemäß Thread Thread 668872 so gelöst: #include <sys/stat.h> #include <sys/types.h> struct stat buf; stat(fileread,&buf); int groesse = buf.st_size; Analog kann man dann noch diverse andere Dateimerkmale auslesen: st_mode; //Dateiart und Zugriffsrechte st_ino; //i-node Nummer st_dev; //Geraetenummer (Dateisystem) st_rdev; //Geraetenummer fuer Geraetedatei st_nlink; //Anzahl der Links auf die Datei st_uid; //User-ID des Eigentuemers st_gid; //Group-ID des Eigentuemers st_size; //Groeße in Byte fuer normale Dateien st_atime; //Zeit d. letzten Zugriffs (access time) st_mtime; //Zeit d. letzten Aenderung in der Datei st_ctime; //Zeit der letzten Aenderung der i-node st_blksize; //voreingestellte Blockgroeße st_blocks; //Anzahl der benoetigten 512-Byte-Bloecke [/PHP] Vielen Dank an alle, die geholfen haben. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.