In Files schreiben - funzt nicht...



  • Hey Leute,

    ich glaube ich sitze gerade dermaßen auf dem Schlauch ...
    Ich will in eine File schreiben, aber es will einfach nicht vom Compiler akzeptiert werden..

    #include <stdio.h>
    FILE* file;
    file = fopen("log.txt","w");
    //Code der DLL
    //Der Code jetzt steht in einer Funktion, sollte aber nichts daran ändern,
    // file ist ja global und das eig. Problem ist oben -.-
    fputc(wParam,&file);
    fclose(&file);
    

    Er markiert mir

    file=fopen("log.txt","w");
    

    und sagt dazu :
    "conflicting types for 'file'
    "previous declaration of 'file' was here (Markiert die Zeile FILE* file;)

    file gibts nur einmal! Also ich habe nicht versucht file 2 mal zu deklarieren/definieren ! Auch wenn ich statt file f schreibe oder irgendwas anderes meckert er ..

    FILE* file = fopen("log.txt","w");
    

    geht auch nicht.
    Btw: er gibt auch noch warnings aus :
    "initializer makes integer from pointer without cast"
    "initializer element is not constant"

    Ich verstehe echt nicht, was er will...
    Danke schonmal im Vorraus ! Mfg



  • Felixxx schrieb:

    Hey Leute,

    ich glaube ich sitze gerade dermaßen auf dem Schlauch ...
    Ich will in eine File schreiben, aber es will einfach nicht vom Compiler akzeptiert werden..

    #include <stdio.h>
    FILE* file;
    file = fopen("log.txt","w");
    //Code der DLL
    //Der Code jetzt steht in einer Funktion, sollte aber nichts daran ändern,
    // file ist ja global und das eig. Problem ist oben -.-
    fputc(wParam,&file);
    fclose(&file);
    

    Er markiert mir

    file=fopen("log.txt","w");
    

    und sagt dazu :
    "conflicting types for 'file'
    "previous declaration of 'file' was here (Markiert die Zeile FILE* file;)

    file gibts nur einmal! Also ich habe nicht versucht file 2 mal zu deklarieren/definieren ! Auch wenn ich statt file f schreibe oder irgendwas anderes meckert er ..

    FILE* file = fopen("log.txt","w");
    

    geht auch nicht.
    Btw: er gibt auch noch warnings aus :
    "initializer makes integer from pointer without cast"
    "initializer element is not constant"

    Ich verstehe echt nicht, was er will...
    Danke schonmal im v****** ! Mfg

    #include <stdio.h>
    FILE* file;
    file = fopen("log.txt","w");
    //Code der DLL
    //Der Code jetzt steht in einer Funktion, sollte aber nichts daran ändern,
    // file ist ja global und das eig. Problem ist oben -.-
    fputc(wParam,file);   // fputc will nicht die Adresse von file sondern den Inhalt.
    fclose(file);         // dito
    


  • Ah okay, das bringt die 2 Warnings schonmal weg. Dachte in der Funktionsbeschreibung *FILE gelesen zu haben, hab mich wohl geirrt ^^

    Auf jeden Fall:
    FILE* F; global geht.
    f=fopen("bla.txt","w"); geht nicht global 😛

    Mfg



  • Felixxx schrieb:

    Auf jeden Fall:
    FILE* F; global geht.
    f=fopen("bla.txt","w"); geht nicht global 😛

    Welchen Sinn soll das auch haben?



  • Anweisungen müssen in einer Funktion stehen! Deklarationen nicht.

    FILE *f; // --> Deklaration, Variante 1 => Global
    
    int main()
    {
     // --> Deklaration, Variante 2 => Lokal
     FILE *f;
    
     f = fopen(...); // Anweisung
    }
    


  • Keine Ahnung -.- Wie gesagt, ich stand total auf dem Schlauch ...
    Habs jetzt in die APIENTRY reingepackt.
    Thx
    Mfg



  • So jetzt noch eine Frage :

    Wenn ich irgendwas in eine Datei schreiben lasse, dann sieht man die Änderung in der File erst, wenn man sie schließt und wieder öffnet.
    Ist es irgendwie möglich zu realisieren, dass man noch während die Datei offen ist, sieht wie dort sachen reingetippt werden ?



  • ich hab keine ahnung was oder wie du lernst, aber scheinbar falsch. du testest keine rückgabe werte und versuchst nicht mal im ansatz ein gutes programm zu schreiben. in c programmiert man nicht damit etwas läuft, sondern dass es sauber gelöst ist. wenn du dich mit dieser einstellung nicht anfreunden kannst such dir ne andere sprache!



  • Und ich weiß nicht wieso ich etwas SAUBER lösen will wenn ich es nichteinmal IRGENDWIE gelöst habe. SAUBER umsetzen kann ich, nachdem ich erstmal die Grundelemente zum laufengebracht habe, es auchnoch.



  • Felixxx schrieb:

    So jetzt noch eine Frage :

    Wenn ich irgendwas in eine Datei schreiben lasse, dann sieht man die Änderung in der File erst, wenn man sie schließt und wieder öffnet.
    Ist es irgendwie möglich zu realisieren, dass man noch während die Datei offen ist, sieht wie dort sachen reingetippt werden ?

    Wie stellst du dir das vor? Die Datei wird immer in dem Zustand geöffnet, wie sie in dem Moment auf der Festplatte vorhanden war.



  • Felixxx schrieb:

    Und ich weiß nicht wieso ich etwas SAUBER lösen will wenn ich es nichteinmal IRGENDWIE gelöst habe. SAUBER umsetzen kann ich, nachdem ich erstmal die Grundelemente zum laufengebracht habe, es auchnoch.

    wow, schau mal ein komplettes beispiel... nahezu fehlerfrei!
    fopen

    btw. sowas gibts natürlich zu jedem befehl. sollte aber auch in jedem halbwegs guten buch bzw. tut dabei stehen. sogar jw testet bei seinem fopen beispiel auf 0.



  • Ich weiß nicht warum die hier rumtrollst.
    Das geht mir gehörig auf den Sack.

    Wozu zeigst du mir jetzt den Link ?! Das ist so unsinnig, kanns fast schon nicht mehr in Worte fassten. Ich hasse solche Menschen.

    @,,,,
    Hmm Du hast natürlich recht. Schade eigentlich ^^ Trotzdem Danke!



  • ich denke du solltest lieber anal-sex praktizieren... da bleibt uns sicher allen ne menge ärger erspart.



  • Ja. Werd erwachsen, kleiner.



  • Du suchst

    int fflush ( FILE * stream );
    


  • Evtl. sogar

    int setvbuf ( FILE * stream, char * buffer, int mode, size_t size );
    


  • Hey Dirk
    fflush hatte ich schon via google gefunden, aber irgendwie werde ich aus der Beschreibung nicht schlau. Habe es einfach mal in mein Programm reingeschrieben ( unter fputc(charValue,file); ). Hat aber leider irgendwie nichts geändert.



  • Die Ausgabe ist gepuffert, d.h. das nicht sofort in die Datei geschrieben wird sondern erstmal in einen reservierten Speicher (im RAM). Wenn der Puffer voll ist wird dieser dann in die Datei auf der Platte geschrieben.

    fflush schreibt den Puffer auch wenn der noch nicht voll ist.
    fclose macht das natürlich auch.

    Mit setvbuf(... ,mode, ..) kannst du aber auch einstellen, das sofort in die Datei geschrieben wird. Dann ist aber die Festplatte ganz schön am arbeiten.

    Der aufruf von fflush ist aber ziemlich einfach.

    fflush(file);
    

    in deinem Fall.



  • AChsoo 🙂 Okay, vielen Dank !


Anmelden zum Antworten