Datei erzeugen !



  • Hallo,

    habe folgendes Problem:

    Ich lege Adressen in einer Struktur ab und speichere später alle Adressen in einer Datei auf der Festplatte ab (siehe Code). Die Datei wird nur gefüllt, wenn ich das DOS-Fenster schließe. Wenn ich das DOS-Fenster nicht schließe, erzeugt er zwar die Datei, aber sie ist leer. Ich möchte aber ohne das DOS-Fenster zu schließen, die Datei abspeichern und wieder darauf zugreifen. Wie kann ich das ändern?

    Funktion zur Abspeicherung der DAtei:

    int adresseSp(struct ListEl **list,char datei[20])
    
    {	FILE *fp;
    
    	fp = fopen(datei,"a");
    
    	fseek(fp,0*sizeof(char),SEEK_SET);
    
    	if(fp == NULL)
    	{
    		printf("Fehler beim Erzeugen der Datei!");
    		return 0;
    	}
    
    	if (*list == NULL)
    		{
    		 printf("Keine Adressen zum Abspeichern vorhanden!\n\n");
    		 return 0;
    		}
    
    	 if (stricmp((*list)->feld,"falsch"))
    
    	{		
    		fprintf(fp, "%s",((*list)->nachn));
    		fprintf(fp, "\n");
    		fprintf(fp, "%s",((*list)->vorn));
    		fprintf(fp, "\n");
    		fprintf(fp, "%s",((*list)->strasse));
    		fprintf(fp, "\n");
    		fprintf(fp, "%s",((*list)->postl));
    		fprintf(fp, "\n");
    		fprintf(fp, "%s",((*list)->ort));
    		fprintf(fp, "\n");
    		fprintf(fp, "%s",((*list)->feld));
    		fprintf(fp, "\n");
    		fprintf(fp, "\n");
    
    	}
    
    	if(((*list)->next) != NULL)
    	{
    		return (adresseSp((&((*list)->next)),datei));
    	}
    
    	else 
    	return 0;
    
    	fclose(fp);
    }
    

    Danke !

    Edit by AJ: Code-Tags eingefügt (@Horst2 gerne doch ;))



  • kann mal bitte jemand code-tags einfügen

    thx



  • if(((*list)->next) != NULL) 
    { 
    return (adresseSp((&((*list)->next)),datei)); 
    } 
    
    else 
    return 0; 
    
    fclose(fp);
    

    Das fclose wird in deinem Programm nicht erreicht, weil ein return auf jeden Fall vorher aufgerufen wird.
    Probier mal, das zu ändern.



  • Hi,

    habe dies getan. Jetzt speichert er die erste Adresse ab während das Fenster geöffnet ist, und den rest macht er erst nach dem Schließen des Fensters rein !



  • hier noch mal der code

    int adresseSp(struct ListEl **list,char datei[20]) 
    { 
        FILE *fp; 
    
        fp = fopen(datei,"a"); 
    
        fseek(fp,0*sizeof(char),SEEK_SET); 
    
        if(fp == NULL) 
        { 
            printf("Fehler beim Erzeugen der Datei!"); 
            return 0; 
        } 
    
        if (*list == NULL) 
        { 
            printf("Keine Adressen zum Abspeichern vorhanden!\n\n"); 
            return 0; 
        } 
    
        if (stricmp((*list)->feld,"falsch")) 
        { 
            fprintf(fp, "%s\n",((*list)->nachn)); 
            fprintf(fp, "%s\n",((*list)->vorn)); 
            fprintf(fp, "%s\n",((*list)->strasse)); 
            fprintf(fp, "%s\n",((*list)->postl)); 
            fprintf(fp, "%s\n",((*list)->ort)); 
            fprintf(fp, "%s\n",((*list)->feld)); 
            fprintf(fp, "\n\n"); 
        } 
    
        fclose(fp); 
    
        if(((*list)->next) != NULL) 
        { 
            return (adresseSp((&((*list)->next)),datei)); 
        } 
        else 
            return 0; 
    
    }
    


  • @guest2209
    Dir ist schon klar, dass du da einen rekursiven Aufruf machst, ja? Wenn du genügend Adressen hast, dann wird dein Programm einfach abstürzen, weil es keinen rekursiven Aufruf mehr machen kann.

    Besser wäre es wenn du deine Liste in einer Schleife durchläufst und in der Schleife deine Funktion mit dem entsprechendem Element, dass gespeichert werden soll, aufrufst.


Anmelden zum Antworten