Terminverwaltung Datei öffnen und Daten reinschreiben



  • Hallo,

    ich will gerade eine Terminverwaltung programmieren und bin bei dem Problem das wenn ich ein Termin gespeichert habe (Das funktioniert wunderbar) und ich das Programm nochmal aufrufe um noch einen termin in die txt Datei zu laden und die Anzahl der Entrys zu aktualisieren, gibt es das Problem das die vorige Anzahl der Entrys auch mit angezgit wird. Ich hab den AT Modus verwendet. gibt es einen Modus der die ganze Text Datei so belässt und nur die erste Zeile ändert?
    Also das man die erste Zeile löschen und durch eine neue ersetzen kann?

    Hier ist der Code

    int saveCalendar(TCalendarEntry *Calendar, int *EntryCount)
    {
     FILE *Datei;
     char fname[] = "./Termine.TXT";
    
       Datei = fopen(fname, "at");
       if (Datei == NULL)
       printf("Datei nicht erzeugt/geoeffnet!\n");
       else
      {
       fprintf(Datei, "Anzahl der Termine: %i\n", EntryCount);
       fprintf(Datei, "Datum: %02d.%02d.%04d\n", Calendar->Date->Day, Calendar->Date->Month, Calendar->Date->Year);
       fprintf(Datei, "Uhrzeit: %02d:%02d Uhr\n", Calendar->Time->Hour, Calendar->Time->Minute);
       fprintf(Datei, "Beschreibung: %s\n", Calendar->Description);
       fprintf(Datei, "Dauer: %02d:%02d Stunden\n \n", Calendar->Duration->Hour, Calendar->Duration->Minute);
       fclose(Datei);
      }
    }
    

    Lg NoXI


  • Mod

    Wenn du Dateien im Binärmodus öffnest, kannst du Zeichen überschreiben. Du kannst aber nicht Zeichen mittendrin hinzufügen oder löschen, dies geht nur am Ende. Deine neue erste Zeile muss also genauso lang sein wie die alte.



  • Ok also geht das bis 9 einträgen und ab 10 nicht mehr oder wie?

    Lg


  • Mod

    TeamNoX schrieb:

    Ok also geht das bis 9 einträgen und ab 10 nicht mehr oder wie?

    Lg

    Sei doch ein bisschen kreativ! Wie wäre es mit ein paar Leerzeichen oder vorangehenden Nullen? Beides stört beim Einlesen nicht weiter.

    Ansonsten sehe ich gar nicht ein, warum du überhaupt die Anzahl der Termine speichern musst. Kann dein Programm die nicht beim Einlesen mitzählen? Das ist dann auch viel flexibler, weil dann auch ein Mensch einfach mit einem Editor neue Termine hinzufügen kann, ohne darauf zu achten ,dass in irgendeiner Zeile noch irgendwelche Zahlen verändert werden müssen, wenn er das tut.
    Das Abspeichern von Zahlen die sich ohnehin aus der Dateistruktur ergeben schreit geradezu danach, dass man irgendwann Probleme mit inkonsistenten Daten bekommt.



  • wenns unbebedingt nötig ist: ändere den dateinamen in z.B. old.txt. erstell eine neue datei mit ursprünglichem namen und kopiere alles von old.txt in die neue datei. nur eben nicht die erste Zeile, die kannst du beim kopiervorgang verändern.



  • wie kann ich die denn verändern beim kopiervorgang?

    Lg



  • beim kopieren liest du alle zeilen einzeln mit fgets aus, die erste zeile könntest du dann umwandeln in eine zahl, diese dann um eins erhöhen und dann schreibst du die zahl so in die neue datei. alle anderen zeilen werden einfach nur ausgelesen und in die andere .txt-datei geschrieben.


Anmelden zum Antworten