Zum Inhalt springen

Variablen in Datei schreiben/lesen in C


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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);

}

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...