Problem mit fwrite



  • Hallo!

    Ich habe ein Programm geschrieben, das bestimmte Einstellungen abspeichern und beim nächsten Programmaufruf wieder laden soll.

    Das Programm versucht eine settings.set Datei im Lese- und Schreibmodus zu öffnen. Falls diese nicht existiert wird sie (im write only modus) erstellt und mit einem Integerwert abgespeichert. Der Integerwert bekommt dabei den Wert 0.

    Wenn ich jetzt das Programm jedoch schließe soll der neue Integerwert abgespeichert werden. In diesem Beispiel wird der Variable zahl einfach nur 1 dazu addiert.

    Wenn ich das Programm jedoch ein 2tes mal öffne, wird wieder der Wert 0 ausgegeben.

    Ich habe in der Zeile 19 anscheinend einen Fehler beim schreiben der Datei. Kann mir jemand helfen?

    #include <stdio.h>
    #include <conio.h>
    
    int createSettings(FILE *pFile);
    
    int main()
    {
    	FILE *pFile=NULL;
    	int zahl;
    	pFile=fopen("settings.set", "r+b");		// settings.set wird im Lese und Schreibmodus geöffnet
    	if(pFile==NULL)							// Falls es keine settings.set gibt wird eine erstellt
    	{
    		createSettings(pFile);	
    		pFile=fopen("settings.set", "r+b");	// Neu erstelle settings.set wird geladen
    	}
    	fread(&zahl, sizeof(int), 1, pFile);	// Der eingespeicherte Integer Wert wird geladen
    	printf("%i\n", zahl);					// Wert wird   ausgegeben
    	zahl++;									// Es wird 1 hinzugezählt
    	fwrite(&zahl, sizeof(int), 1, pFile);	// <<<<<===============HIER IST DER FEHLER!==============
    	getch();								// Programm anhalten
    	return 0;
    }
    
    int createSettings(FILE *pFile)
    {
    	int standard=0;							// Die Standardeinstellung soll 0 sein
    	pFile=fopen("settings.set", "wb");
    	fwrite(&standard, sizeof(int), 1, pFile);
    	fclose(pFile);
    	return 0;
    }
    


  • Ich denke, daß der erste Parameter bei fwrite vom Typ *FILE sein sollte. Sicherheitshalber nachschlagen: man: fwrite.

    EDIT:
    Nachschlagen kann ich selbst auch. Da hatte ich was verwechselt, war also Blödsinn. Ich denk drüber nach...



  • 😉



  • Es gab wohl Probleme mit dem r+b mode, so gehts...

    #include <stdio.h>
    #include <conio.h>
    
    int createSettings(FILE *pFile);
    
    int main()
    {
    	FILE *pFile=NULL;
    	int zahl;
    	pFile=fopen("settings.set", "rb");		// settings.set wird im Lese und Schreibmodus geöffnet
    	if(pFile==NULL)							// Falls es keine settings.set gibt wird eine erstellt
    	{
    		createSettings(pFile);	
    		pFile=fopen("settings.set", "rb");	// Neu erstelle settings.set wird geladen
    	}
    
    	fread(&zahl, sizeof(int), 1, pFile);	// Der eingespeicherte Integer Wert wird geladen
    	fclose(pFile);							// Daten wurden geladen, Datei wird geschlossen
    	printf("%i\n", zahl);					// Wert wird ausgegeben
    	zahl++;								// Es wird 1 hinzugezählt
    	pFile=fopen("settings.set", "wb");
    	fwrite(&zahl, sizeof(int), 1, pFile);	// <<<<<===============HIER IST DER FEHLER!==============
    	fclose(pFile);
    	getch();								// Programm anhalten
    	return 0;
    }
    
    int createSettings(FILE *pFile)
    {
    	int standard=0;							// Die Standardeinstellung soll 0 sein
    	pFile=fopen("settings.set", "wb");
    	fwrite(&standard, sizeof(int), 1, pFile);
    	fclose(pFile);
    	return 0;
    }
    

    Trotzdem danke!


Anmelden zum Antworten