minicrispie: C Dateiverwaltung

Hallo,

ich arbeite grad an einem kleinen programm(Konsole) und möchte alles, was dort geschieht, in eine Session speichern.
Also:
1. Datei öffnen
2. schreiben
3. Datei schliessen
Da die Texte immer varieren hab ich eine int Session geschrieben

Hier mein Code:

/********* SESSION *********/  
int Session(const char *eintrag)  
{  
 //Datei öffnen  
 FILE * datei;  
 fopen("session.txt", "a");  
  
 //Eintrag hinzufügen  
 fprintf(datei, eintrag);  
  
 //Datei schliessen  
 fclose(datei);  
 return 0;  
}  
  
/********* HAUPTFUNKTION *********/  
int main()  
{  
 //Fensterhandle speichern  
 console = GetStdHandle(STD_OUTPUT_HANDLE);  
  
 //Eintrag zur Session hinzufügen  
 Session("\n\n\nProgramm gestartet");  
  
 //Programm "starten"  
 Reset();  
  
 //Wertübergabe ans Betriebssystem  
 return 0;  
}

Der Compiler gibt mir hier keine Fehlermeldung zurück, aber wenn ich das programm öffne, dann bricht es sofort ab("blablabla.exe hat ein Problem festgestellt und muss beendet werden.")

Was mache ich falsch?

MfG. Christoph Ludwig

--
Wo die Sprache aufhört, fängt die Musik an...
Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
Go to this
  1. Hi,

    Der Compiler gibt mir hier keine Fehlermeldung zurück, aber wenn ich das programm öffne, dann bricht es sofort ab("blablabla.exe hat ein Problem festgestellt und muss beendet werden.")

    wie so oft ist es nur eine Kleinigkeit.

    int Session(const char *eintrag)
    {
    //Datei öffnen
    FILE * datei;
    fopen("session.txt", "a");

    Und was ist mit dem Rückgabewert von fopen()?

    fprintf(datei, eintrag);

    Hättest du ihn verwertet, dann wäre datei jetzt möglicherweise ein gültiger File-Descriptor.
    Hättest du ihn nicht nur verwertet, sondern sogar geprüft, dann wäre datei jetzt mit Sicherheit ein gültiger File-Descriptor.
    So aber ist es nur ein zufälliger, nicht initialisierter Zeiger.

    int main()
    {
    //Fensterhandle speichern
    console = GetStdHandle(STD_OUTPUT_HANDLE);

    Was ist der Sinn dieser Abfrage, wo du doch console nie wieder verwendest?

    So long,
     Martin

    --
    Man gewöhnt sich an allem, sogar am Dativ.
    1. Hallo,

      wie so oft ist es nur eine Kleinigkeit.
      Und was ist mit dem Rückgabewert von fopen()?

      verdammt!
      ok... jetzt funktionierts.

      console = GetStdHandle(STD_OUTPUT_HANDLE);

      Was ist der Sinn dieser Abfrage, wo du doch console nie wieder verwendest?

      Mein programm umfasst bis jetzt 605 Zeilen --> Das ist nur ein Auszug, der relevant für dieses Problem war.
      console verwende ich für das setzen der Cursor-Position...

      ich sollte eindeutig mal schlafen, bevor ich code schreibe ;)
      gestern z.b. hab ich an dieses "datei = fopen(...)" gedacht *g*

      MfG. Christoph Ludwig

      --
      Wo die Sprache aufhört, fängt die Musik an...
      Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
      Go to this
    2. Hallo,

      Das mit der Session klappt jetzt soweit. Alles wird dann in eine Text-Datei geschrieben:
      [Datum, Uhrzeit] Aktion

      wie merkt das Programm, ob auf das Kreuz gedrückt wurde? gibts da ne Möglichkeit, das rauszufinden?

      MfG. Christoph Ludwig

      --
      Wo die Sprache aufhört, fängt die Musik an...
      Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
      Go to this
      1. Hi minicrispie!

        wie merkt das Programm, ob auf das Kreuz gedrückt wurde?

        Welches Kreuz? So wie ich dich verstehe, ist das eine Konsolenanwendung...

        gibts da ne Möglichkeit, das rauszufinden?

        Bei Fensterapplikationen wird unter Windows die Nachricht WM_CLOSE gesendet.

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
        1. Hallo,

          Hi minicrispie!

          wie merkt das Programm, ob auf das Kreuz gedrückt wurde?
          Welches Kreuz? So wie ich dich verstehe, ist das eine Konsolenanwendung...

          ja, ist es auch. Trotzdem hat man bei der Konsole ein Schliessen-Kreuz...

          gibts da ne Möglichkeit, das rauszufinden?
          Bei Fensterapplikationen wird unter Windows die Nachricht WM_CLOSE gesendet.

          ja das ist mir bekannt. Nur wie mache ich das bei der Konsole ?

          MfG. Christoph Ludwig

          --
          Wo die Sprache aufhört, fängt die Musik an...
          Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
          Go to this
          1. Hi minicrispie!

            Bei Fensterapplikationen wird unter Windows die Nachricht WM_CLOSE gesendet.
            ja das ist mir bekannt. Nur wie mache ich das bei der Konsole ?

            Da musst du dich mal selbst einarbeiten: http://msdn.microsoft.com/en-us/library/ms683242(VS.85).aspx.

            Viel Spaß. =)

            MfG H☼psel

            --
            "It's amazing I won. I was running against peace, prosperity, and incumbency."
            George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
            Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
  2. Hi,

    Da die Texte immer varieren hab ich eine int Session geschrieben

    Wenn du kein Error-Handling machst reicht auch eine void-Funktion.
    Besser wäre es aber, wenn du je nachdem ob das Schreiben erfolgreich war oder nicht unterschiedliche returncodes zurückgibst.

    mfG,
    steckl