komplettes struct mit fprintf in Datei schreiben?
-
nimm für dein programm lieber ein struct array!
struct daten { char name[15]; int raum; char benutzer[20]; char login_zeit[20]; } computer[100];
dann musst du mit
lseek(Datei,0L,SEEK_SET);
immer auf den anfang springen um zu speichern.
hast es dann aber alles identisch wieder im struct drinne und kannst es nach belieben bearbeiten.mfg hohesC
-
hohesC schrieb:
ja!
mitlseek(Datei,0L,SEEK_END);
springst du ans ende der datei und schreibst dort weiter!
mfg hohesC
Wow, das ist ja der Hammer!
Es funktioniert! Kann ich dem Prog mit lseek auch irgendwie sagen, dass er vom Anfang der Datei aus die Daten ausgeben soll? Sonst zeigt er mir immer nur den ersten Eintrag an.Danke für deine super Hilfe. Wieso gibt es eigentlich zum Öffnen, Schreiben und Lesen von Dateien so viele Möglichkeiten?
-
guck mal eins über deinem post!
das mit dem struckt array würde ich dir wie gesagt empfehlen, dann hast du sie wie schon erwähnt alle im struct und kannst nach belieben editieren.mfg hohesC
-
hohesC schrieb:
guck mal eins über deinem post!
das mit dem struckt array würde ich dir wie gesagt empfehlen, dann hast du sie wie schon erwähnt alle im struct und kannst nach belieben editieren.mfg hohesC
Ok, werde mich heute abend darin vertiefen. Bin noch auf Arbeit und kann leider jetzt nicht weitermachen. Aber nochmals vielen Dank für deine Hilfe. Sobald ich es ausprobiert habe, werde ich die Ergebnisse hier melden.
MfG
-
hohesC schrieb:
nimm für dein programm lieber ein struct array!
struct daten { char name[15]; int raum; char benutzer[20]; char login_zeit[20]; } computer[100];
dann musst du mit
lseek(Datei,0L,SEEK_SET);
immer auf den anfang springen um zu speichern.
hast es dann aber alles identisch wieder im struct drinne und kannst es nach belieben bearbeiten.mfg hohesC
Hallo hohesC
Bin leider auf ein paar Probleme gestoßen.
Habe jetzt folgendes struct array:struct daten { char name[20]; char raum[10]; char benutzer[20]; char login_zeit[20]; } computer[100];
Wenn ich nun mehrere Daten aus der Datei lesen möchte, habe ich jetzt eine for-Schleife gebaut. Hier gibt es nun 2 Probleme:
1. Wie kriege ich raus, wieviele structs in meiner Datei stehen? Die Zahl ist nötig für die Zählvariable der for-Schleife.
2. Wie mache ich bei der Ausgabe klar, dass das Prog für die Zählvariable i den entsprechenden Index einsetzt, um die gewünschten structs anzusprechen?Hier meine for-Schleife:
for(i=0; i<="Anzahl der structs?"; i++) { read(Datei,&computer,sizeof(computer)); printf("\n\n%s\n", computer[i].name); printf("%s\n", computer[i].raum); printf("%s\n", computer[i].benutzer); printf("%s\n", computer[i].login_zeit); }
Hoffe mal, ich habe mich verständlich genug ausgedrückt.
Danke für deine Hilfe
-
Also den 2. Punkt habe ich jetzt hinbekommen. ich bräuchte nur noch mal Hilfe beim Zählen der Elemente, damit ich der Zählvariable ein Limit setzen kann. Ansonsten läuft der Array zu oft durch und der letzte Eintrag wird einfach so oft wiederholt, bis die bedingung nicht mehr stimmt, oder aber sie wird zu wenig ausgeführt.
Bitte um eure Hilfe, ist sehr wichtig für mich!
Danke an Alle
-
Du benutzt eine binäre Datei, du kannst auch andere Informationen darin speichern.
Eine Frage ist computer das gesamte Feld oder ist computer ein Element des Feldes. Falls computer ein Element ist ginge folgende LösungDas nötigen Codeausrisse sehen dann so aus: (Bitte des Fehlerhandling nicht vergessen)
#define Feldlänge 100 typedef struct { char name[15]; int raum; char benutzer[20]; char login_zeit[20]; } DatenSTRUCT; .... DatenSTRUCT computer[Feldlänge]; int AnzElemente; .... // Dump der gesamten Datei lseek(Datei,0L,SEEK_SET); read(Datei,&AnzElemente,sizeof(int)); if (AnzElemente > Feldlänge) { // Fehlermeldung Mehr Elemente im File Als reservierter Speicher } for(i=0; i<=AnzElemente; i++) { read(Datei,&(computer[i]),sizeof(DatenSTRUCT)); printf("\n\n%s\n", computer[i].name); printf("%s\n", computer[i].raum); printf("%s\n", computer[i].benutzer); printf("%s\n", computer[i].login_zeit); } ..... //Das Schreiben der gesamten Datenbank //Schreiben der Anzahl an den Anfang der Datei lseek(Datei,0L,SEEK_SET); write(Datei,AnzElemente,sizeof(int)); //Schreiben der gesamten Daten for(i=0; i<=AnzElemente; i++) { write(Datei,&(computer[i]),sizeof(DatenSTRUCT)); ......... //um einen beliebigen Record an Position Pos zu überschreiben lseek(Datei,sizeof(int)+(Pos*sizeof(DatenSTRUCT),SEEK_SET); write(Datei,computer[Pos],sizeof(DatenSTRUCT)); .......... //um einen beliebigen Record an Position Pos zu lesen. lseek(Datei,sizeof(int)+(Pos*sizeof(DatenSTRUCT),SEEK_SET); read(Datei,&AnzElemente,sizeof(int)); .......... //um einen neuen DatenRecord ans Ende anzuhängen lseek(Datei,0L,SEEK_END); write(Datei,&NeueDaten,sizeof(DatenSTRUCT)); Dann wieder an den Anfang der Datei und die Anzahl aktualisieren. lseek(Datei,0L,SEEK_SET); write(Datei,AnzElemente,sizeof(int)); ........