In Textdatei Zeiten einspeichern



  • Hi,
    ich versuche gerade ein programm zu schreiben, dass wenn es geöffnet wird eine .txt datei erstellt und bei jedem öffnen auch in diese die weiteren infos reinschreibt. Ich möchte, dass er das Datum mit entsprechender Uhrzeit in die txt datei speichert vom öffnen der datei. Und das er speichert wielange die datei offen war anhand einer selbst programmierten stoppuhr. Das mit dem Datum kriege ich ja hin, aber das er die zeit der stoppuhr so einspeichert das nur die letzte zeit bevor das programm geschlossen wurde einspeichert kriege ich nich hin.
    Über hilfe würde ich mich sehr freuen!



  • Woran genau scheiterst du denn jetzt? Du schreibst die Startzeit direkt nach dem fopen() und die Endzeit direkt vor dem fclose().



  • CStoll schrieb:

    Du schreibst die Startzeit direkt nach dem fopen() und die Endzeit direkt vor dem fclose().

    Ehm, wir sind hier im C++-Forum.



  • Ich möchte gerne, dass die stoppuhr zählt und dabei jede sekunde die zeit neu in die txt datei schreibt, aber nicht jede sekunde in eine neue zeile, sondern das er die zeit sozusagen immer neu aktualisiert. Und das dann in der txt datei das datum mit uhrzeit drinnsteht und darunter die zeit wie lange die datei offen war. Und darunter das datum und zeit von der nächsten öffnung der datei:
    z.b.:

    Sun May 08 19:23:08 2011
    00:15:34

    Mon May 09 20:14:23 2011
    01:23:45

    Das mit dem Datum läuft bei mir schon gut. Und meine Stoppuhr sieht so aus:

    system("cls");            
              cout<<"               ...::: "<< st <<" : "<< mi <<" : "<< sk <<" :::..." <<endl;
    
                sk++;
    
                  if(sk==60)
                  {
                   mi++;
                   sk=00;          
                  }
    
                  if(mi==60)
                  {
                   st++;
                   mi=00;          
                  }
                  Sleep(1000);
    

    Und das alles in einer schleife. Jetzt fehlt nur noch das er die zeit nur einmal in die Datei einspeichert.



  • Dann mußt du halt in der Datei ein Stück nach vorne rücken und die vorherige Ausgabe überschreiben - dazu benötigst du ostream::tellp() und ostream::seekp().



  • Wäre es nicht einfacher beim Öffnen einfach das aktuelle Datum hineinzuschreiben dann einfach mit der Stoppuhr die Zeit zählen und dann erst vorm dem schließen die Dauer reinzuschreiben?

    Ansonsten, wenn du es immer aktualisieren willst, müsstest du immer wieder in der Datei zurückiterieren, wenn es keinen bestimmten Grund dafür gibt würde ich die Nutzungszeit erst am Ende reinschreiben.

    Lg freeG



  • Jo danke.Mit dem Befehl a.seekp (pos-14); funktioniert es.
    Hab es jetzt so geschreieben:

    #include <conio.h>
    #include <fstream>
    #include <iostream>
    #include <time.h>
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/timeb.h>
    #include <string.h>
    #include <stdlib.h>
    #include <windows.h>
    #include <sstream>
    
             HWND hwnd = FindWindow("ConsoleWindowClass",NULL);
    
    using namespace std;
    main()
    {
          //ShowWindow(hwnd,SW_HIDE);
    
          char tmpbuf[128], ampm[] = "AM";
          time_t ltime;
          struct _timeb tstruct;
          struct tm *today, *gmt, xmas = { 0, 0, 12, 25, 11, 93 };
          _tzset();
    
      fstream a;
    
      float st=0,mi=0,sk=0,ms=0;
    
                           a.open("test.txt",ios::out | ios::app);
                           time( &ltime );    
                           a <<endl<<endl<< ctime(&ltime) <<"      "<<endl ;
                           a << st <<" : "<< mi <<" : "<< sk  ;
                           a.close();
    
          long pos;                 
          do{
              system("cls");            
              cout<<"               ...::: "<< st <<" : "<< mi <<" : "<< sk <<" :::..." <<endl;
    
                sk++;
    
                  if(sk==60)
                  {
                   mi++;
                   sk=00;          
                  }
    
                  if(mi==60)
                  {
                   st++;
                   mi=00;          
                  }
    
                                   a.open("test.txt",ios::in | ios::out | ios::ate);
                                   pos=a.tellp();
                                   a.seekp (pos-14);
                                   a <<"   "<<st<<" : "<<mi<<" : "<<sk<<endl;
                                   a.close();
    
              Sleep(1000);
              }while(st<61);
    
     getch();     
    }
    


  • Filestreams können RAII -.-



  • kalle92 schrieb:

    Jo danke.Mit dem Befehl a.seekp (pos-14); funktioniert es.

    Ich hätte ja die Position gemerkt, bevor ich die Zeit ausgebe, um dann wirklich genau an die richtige Position zurückzuspringen 😉

    PS: Die Zuweisung sk=00; bewirkt übrigens nicht, daß der Wert später als 00 ausgegeben wird 😉


Log in to reply