C Dateiverwaltung
minicrispie
- programmiertechnik
0 Der Martin
0 minicrispie0 minicrispie0 Hopsel0 minicrispie0 Hopsel
0 steckl
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
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
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
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
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
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
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
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