Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
18.08.2002, 23:45
feigling



Hi,
ich hab folgendes Problem.
Ich habe mit ein Programm geschrieben und möchte nun, dass wenn Fehler auftreten, diese dann in der Datei engine.txt gespeichert werden.
Das ist eigentlich kein großes Problem. Mein Programm erstellt schön die engine.txt, wenn diese noch nicht vorhanden ist, aber es wird dort nix reingeschrieben. Daher habe ich mir ein Testprogramm gemacht und alle wichtigen Sachen von dem Loggen (open .....) da hineinkopiert, da ich dachte, dass ich was verkehrt gemacht habe.
So sieht das Testprogramm aus:

Quellcode:
#include <stdio.h>

FILE    *logfile;

void Log(char *errormessage)
{
    fprintf(logfile,"%s\n", errormessage);
}

void main()
{
    logfile = fopen("engine.txt","w");

    Log("**************************************************");
    Log("*                 ENGINE LOGFILE                 *");
    Log("**************************************************");
    Log("");
    Log("");
    Log("Error Test() -> FAILED");
    Log("");
    Log("");
    Log("**************************************************");
    Log("*                 ENGINE LOGFILE                 *");
    Log("**************************************************");

    fclose(logfile);
}

Als ich das dann getestet hat, lief es wunderbar.
Dann habe ich nochmal überprüft, ob mein anderes Programm irgendwo einen Fehler hat, aber da scheint alles genauso geschrieben zu sein, wie im Testprogramm. Ich werde jetzt den Code vom richten Programm nicht in cpp Tags einfügen, weil es dann zu kompliziert werden würde. Ich lade den Code vom Hauptprogramm einfach hoch.
Ich weiß echt nicht mehr, wodran es liegt, dass der keine Log-Dateien schreibt. Ich würde mich echt freuen, wenn mir jemand helfen könnte.

Download vom Hauptcode: http://mitglied.lycos.de/wolfskuhle0/Engine.zip

€dit:
Ich geb auch nochmal ein paar Hinweise, damit man sich nicht durch den ganzen Code quälen muss:
Also, eigentlich spielt sich alles in der main.cpp ab.
Die anderen cpp Dateien rufen lediglich Log auf (void Log(...)) und das ist in der global.h deklariert, damit jede andere Datei die Funktion verwenden kann.
Also alles findet in der main.cpp statt und dort in den Funtkionen:
BOOL Game_Init(HINSTANCE hinst) -> Laden von engine.txt und einige Zeilen schreiben.
BOOL Game_Exit(void) -> fclose(logfile);
void Log(char *errormessage) -> Reinschreiben von Daten

Das ist eigentlich alles, was man sich dafür angucken müsste.
Ich hab auch schon getestet, ob überhaupt was bei errormessage ankommt, aber dort kommen die Nachrichten ganz normal an.
Es muss irgendwie an der zeile liegen:
Quellcode:
  fprintf(logfile,"%s\n", errormessage);

obwohl
Quellcode:
  fprintf(logfile,"Hallo");

auch nix in die Datei reinschreibt ...

--


Dieser Beitrag wurde am 18.08.2002 um 23:57 von feigling bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
19.08.2002, 19:59
feigling



Fehler gefunden :)
Scheinbar wird die LogDatei am Ende nicht wieder zugemacht und dadurch werden dann die ganzen Sachen, die geloggt werden sollten, nicht in die Datei eingetragen. Ich werde mal sehen, warum die nicht zugemacht wird.
Danke nochmal an alle, die mir geholfen haben (ob im Forum oder per Dauer PM ;)

--

zum Seitenanfang zum Seitenende Profil || Suche
002
19.08.2002, 21:02
Jeff



wird die datei denn schon richtig geöffnet?
irgendwie wat weiß ich falsch?
if(logfile)
printf("alles klar");

beim mir hat der mal einen file nie anlegen wollen...naja...aber ich bin noch anfänger, will aba auch helfen :-)

--

Jeff

zum Seitenanfang zum Seitenende Profil || Suche
003
19.08.2002, 21:13
feigling



Jo, es wird immer, wenn keine Datei vorhanden ist, eine angelegt :)
Das Problem ist das, dass die Datei am Ende nicht zugemacht wird, weil die Funktion, die dafür zuständig ist, nicht ausgeführt wird und daher werden die Zeilen, die eigentlich geloggt werden sollten, nicht in die Datei geschrieben.
Aber leider weiß ich nicht, warum die nicht funzt, denn eigentlich ist der Aufruf davon an der richtigen Stelle. Da bin ich noch am Rätsel, warum das nicht funzt.
Die Funktion, die aufgerufen werden soll, soll das Spiel dann eigentlich beenden und den Speicher wieder aufräumen. Jetzt weiß ich aber auch, wo der ganze Speicher immer hin ist =) Dadurch, das´s die Funktion nicht aufgerufen wird, wird auch der Speicher nicht wieder freigegeben. Hab mich schon gewundert :D

--


Dieser Beitrag wurde am 19.08.2002 um 21:16 von feigling bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
25.08.2002, 18:56
[RMen]OneStone



Quellcode:
bool CLogManager::Log(const char *szMessage, ...)
{
    char szMsg[512];
    va_list valList;

    if(!szMessage)
        return false;
    
    if(!m_pFileHandle)
        return false;

    va_start(valList, szMessage);
    vsprintf(szMsg, szMessage, valList);
    va_end(valList);

    fwrite(szMsg, strlen(szMsg), 1, m_pFileHandle);
    fflush(m_pFileHandle);

    return true;
}

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
005
25.08.2002, 18:59
feigling



Und jetzt ?

--

zum Seitenanfang zum Seitenende Profil || Suche
006
25.08.2002, 20:42
Archangel



ähm onestone ? hallo ?

wieso erst mit vsprintf in nen string schreiben und dann per fwrite schreiben ? schonmal was von vfprintf gehört ?
vor allem, was wenn die ausgewertete szMessage länger als 511 zeichen is ? entweder man benutzt vfprintf, oder, wenn man es so wie du machen willst, benutzt man (_)vsnprintf

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005

zum Seitenanfang zum Seitenende Profil || Suche
007
26.08.2002, 14:12
[RMen]OneStone



Ach egal... =)
Ich hab's nur mal so als Besipiel schnell hingecodet, da macht man sich über sowas keine Gedanken...

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche