fopen() - Warum bleibt die File leer?



  • ich wollte zum loggen mittels fopen() arbeiten, dazu habe ich folgende Anweisungen verwendet:

    FILE *pfile;
      pfile=fopen("alog.txt","wt");  
      fputs("Logfile angelegt \n \n", pfile);
    

    Die Datei alog.txt wird auch wirklich angelegt, nur bleibt sie leider leer. Was habe ich verpennt?

    Danke!



  • garnichts, weil die drei zeilen keine fehler enthalten. liefere bitte einen gesamtcode ab, der das problem darstellt (ich will nicht den gesamten projektcode).
    du solltest allerdings den rueckgabewert von fopen() auf fehler pruefen (fehler, wenn <=0).

    ausserdem benutzt du nicht pfile (deine variable) sondern fopen().

    oh, und probier mal, die datei zu schliessen, wenn du fertig bist!



  • Geschlossen wird die Datei am Ende und das mit pfile war ein Tippfehler. Den Projektcode erspar ich Dir, da stehen irgendwelche DB abfragen drin, die da sicher nicht aufschlussreich sind. Alles was mit fopen() in Zusammenhang steht, sieht für mich zu später Stunde ganz okay aus. Daher ja meine Verwunderung.

    FILE *pfile;
      pfile=fopen("soaplog.txt","wt");  
      fputs("Logfile angelegt \n \n", pfile);
    (...Projektcode...)
      fputs("Query konnte nicht erfolgreich durchgefhrt werden! \n",pfile);
    (...)
     fputs("Alles Klar! - Daten wurden gesendet \n \n", pfile);
     fclose(pfile);
    


  • Liefert fopen einen gültigen Zeiger (wenn die Datei angelegt wird: vermutlich ja) und sind die Rückgabewerte von fputs korrekt?

    Wenn ja: kannst Du ein vollständig compilierbares Minimalbeispiel schreiben, das diesen Fehler reproduziert?



  • Ohne fclose() werden die Daten unter Windows meist nicht in die Datei geschrieben wenn der Cache noch nicht voll war und Windows den Cache auf die Platte ausgelagert hat.

    MfG SideWinder



  • Langsam wird es mysteriös, ich habe eine if Bedingung eingebaut:

    FILE *pfile;
      pfile=fopen("soaplog.txt","wt");  
      if(fputs("Logfile angelegt \n \n", pfile) != 0)
     	{
    	FILE *newfile;
    	newfile=fopen("notnull.txt","wt");
    	fputs("gagagag",newfile);
    	fclose(newfile);
    	}
    (...)
    

    Mit dem Resultat, dass fputs() scheinbar nicht 0 zurückgibt, denn es wird eine Datei namens "notnull.txt" angelegt und diese hat den Inhalt "gagagag".

    Wo ist der Unterschied? Ich seh' nämlich keinen. Warum funktioniert fputs() dann einmal nicht und beim nächsten Mal dann schon??? Faszinierend.



  • @SideWinder

    Ist aber nicht Windows....um genau zu sein Ubuntu Linux



  • Jedes mal öffnen, Eintragen, schliessen...ein bisschen Umständlich, aber wat soll's...



  • http://www.cppreference.com/stdio/fputs.html

    fehler == EOF und nicht != 0 wie du gedacht hast... benutze eine referenz, wenn du programmierst. sonst kommen fehler rein.

    mein verdacht, "wt" wird nicht verstanden. probier mal nur "w" oder "a", wenn du zeilen anfuegen willst (was du ja machen willst, oder?)



  • wt versteht er. Es ist wirklich das Ding mit dem fclose gewesen, man muss jedes Mal zumachen, damit er wirklich reinschreibt. Am Anfang nutze ich wt, damit alte Dateien überschrieben werden, danach immer at. Danke Für die Hilfe.

    Ja, und dass mit der 0, dass hatte ich wirklich geraten 😉



  • Physikalischer Fehler schrieb:

    @SideWinder

    Ist aber nicht Windows....um genau zu sein Ubuntu Linux

    Kleiner Tipp: Die meisten LINUX-Distros (um genau zu sein, ich keine, die dies nicht haben), haben im Teil ihrer man-Page eine C/C++ Referenz.

    man 3 fputs
    

    Erzeugt u. a. folgenden Output:

    RETURN VALUE
    fputc(), putc() and putchar() return the character written as an unsigned char cast to an int or EOF on error.

    puts() and fputs() return a non-negative number on success, or EOF on error.


Anmelden zum Antworten