SBDevil Geschrieben 23. Februar 2005 Geschrieben 23. Februar 2005 Guten Tag! Ich hab ein Problem: Und zwar möchte ich gern Variablen-Werte in einer Datei speichern, so dass ich mein Programm beenden kann und beim nächsten Start wieder mit den alten Werten weiter machen kann. Leider ist das einzigste was ich weiß, wie ich eine Datei erstelle (ohne Inhalt) und wie ich aus einer vorhanden Datei den Inhalt auf dem Monitor ausgebe. Wie kann ich also meine ganzen int-Werte in eine Datei speichern und wie kann ich se wieder zurück in mein programm holen? Über Hilfe wär ich sehr dankbar MfG SBDevil Zitieren
Bubble Geschrieben 23. Februar 2005 Geschrieben 23. Februar 2005 Schau Dir die Dokumentation und Beispiele der Funktionen fopen, fclose, fread und fwrite an. Beispiel für fwrite: int a=2; fwrite(&a,sizeof(int),1,streamptr); Beispiel für das Einlesen: int b; fread(&b,sizeof(int),1,streamptr); Damit kannst Du Dein Problem lösen. Die erzeugten Dateien sind allerdings nicht über alle Plattformen hinweg portabel. Zitieren
SBDevil Geschrieben 23. Februar 2005 Autor Geschrieben 23. Februar 2005 Genau sowas hab ich gesucht! Danke:) Zitieren
nic_power Geschrieben 23. Februar 2005 Geschrieben 23. Februar 2005 Hallo, Du kannst sowas auch mit fprintf() und fscanf()/atoi() erledigen. Das hat den Vorteil, dass das Fileformat "menschenlesbar" ist und Du dich ggf. nicht mit den "Spezialitäten" unterschiedlicher Architekturen (größe von "int", Byteorder, usw.) bei einer Portierung rumschlagen musst. Nachteil ist, dass mehr Speicherplatz verbraucht wird und das Format dann nicht so kompakt ist. Nic Zitieren
SBDevil Geschrieben 23. Februar 2005 Autor Geschrieben 23. Februar 2005 Hi, habs jetzt mit dem fwrite probiert ne Variable zuspeichern. Irgendwas hat er auch in der Datei gespeichert... allerdings gibt er beim lesen nur komische Zeichen oder nichts aus! Mein Quelltext sieht ungefähr so aus: FILE *datei; char name[21]; int a=1; void read_char(FILE *stream){ int c; while((c=fgetc(stream))!=EOF) putchar©; } void neu(){ printf("Unter Welchen Namen Soll gespeichert werden? \n"); scanf("%s",&name); getchar(); datei = fopen(name ,"w"); fwrite(&a,sizeof(int),1,datei); } void laden(){ char x[21]; printf("Wie lautet die Datei, die geoeffnet werden soll? \n"); scanf("%s",&x); getchar(); datei = fopen(x ,"r"); if(datei != NULL) read_char(datei); } Mehrere Fragen dazu: Was ist falsch oder was muss ich anders machen? Und wie bekomme ich den Inhalt wieder in a statt ihn auszugeben? Wenn ich mehrere Variablen hab muss ich dann einfach fwrite öfters anwenden nur statt der 1 mit 2,3,4 und so weiter? Über nen Beispiel oder so würd ich mich freuen MfG SBDevil Zitieren
nic_power Geschrieben 23. Februar 2005 Geschrieben 23. Februar 2005 Hallo, Du schreibst mit "fwrite()" und liest mit fget© die Bytes einzeln aus der Datei, um sie dann auszugeben. Das funktioniert nicht, da die Formate nicht kompatibel zueinander sind. In Deinem beispiel müsstest Du mit "fread()" das integer wieder einlesen und dann ausgeben. Nic Zitieren
Bubble Geschrieben 23. Februar 2005 Geschrieben 23. Februar 2005 Mein Quelltext sieht ungefähr so aus: Ich habe den Quelltext einmal verbessert. fclose nicht vergessen. Ich hab ein paar Kommentare hinzugefügt, wo ich etwas geändert habe. FILE *datei; char name[21]; int a=1; // Funktion read_char gelöscht void neu(){ printf("Unter Welchen Namen Soll gespeichert werden? \n"); scanf("%20s",name); // name ist bereits Pointer, max. Größe angeben getchar(); datei = fopen(name ,"wb"); // b für binär verwenden fwrite(&a,sizeof(int),1,datei); fclose(datei); /Datei schließen } void laden(){ char x[21]; printf("Wie lautet die Datei, die geoeffnet werden soll? \n"); scanf("%20s",x); // x ist bereits ein Zeiger, max. Größe angeben getchar(); datei = fopen(x ,"rb"); // b für binär verwenden if(datei != NULL) { fread(&a,sizeof(int),1,datei); printf("Es wurde folgende Zahl eingelesen: %i\n",a); } fclose(datei); } Zitieren
SBDevil Geschrieben 23. Februar 2005 Autor Geschrieben 23. Februar 2005 Wunderbar jetzt klappt alles! 1000 dank euch Beiden 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.