Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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)	

Geschrieben

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

Geschrieben

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

}

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...