Time in txt-Datei schreiben



  • Hallo,

    ich möchte die aktuelle Zeit und das Datum in eine Datei schreiben, leider bekomme ich eine Fehlermeldung:

    [C++ Fehler] Unit1.cpp(103): E2015 Mehrdeutigkeit zwischen 'std::basic_ostream<char,std::char_traits<char> >::operator <<(int)' und 'std::basic_ostream<char,std::char_traits<char> >::operator <<(double)'

    Der Code sieht so aus:

    TDateTime t = Time();
    TDateTime d = Date();

    //Messdaten in Textdatei schreiben
    ofstream datei;
    datei.open("C:\\Wetterstation\\Daten.txt" , ios_base::app);
    datei<<Temperatur<<'\t'<<Luftdruck<<'\t'<<Feuchte<<'\t'<<Windstaerke<<'\t'<<t<<endl;
    datei.close();

    Wer kann mir weiterhelfen, kann ja eigentlich nur eine Kleinigkeit sein?

    mfg ahl



  • öhm vielleicht nützt dir aus der stdio.h fopen & fread/fwrite was?
    (fclose nicht vergessen)

    beispiel:

    #include <stdio.h>
    
    FILE *f;
    char datei[]="C:\\Bla.txt";
    
    f=fopen(datei,"w"); 
                        /* falls nicht existierend,
                         * wird die datei erstellt,
                         * falls doch überschrieben
                         */
    char text[]="blabla";
    fwrite(text); //die funktionen wollen ein char
    fclose(datei);
    


  • Hallo Blackhawk,

    kann ich so mal versuchen, in die Datei kann ich schreiben, es funktioniert auch alles, nur das Datum und die Zeit kann ich nicht in die Datei schreiben, dann kommt die Fehlermeldung. Ich denke, weil das Format nicht stimmt, die Zeit hat das Format DateTime.



  • TFileStream *file=new TFileStream("c:\\bla.txt",fmCreate);
    TDateTime zeit=zeit.CurrentDateTime();
    file->Write(DateTimeToStr(zeit).data(),19);
    delete file;
    


  • Also ich hab das so gelöst und es funktioniert:

    // Includes, die du brauchst (neben BCB-Standard-Includes)
    #include <time.h>
    #include <stdio.h>
    
    // Funktion zum Abspeichern
    bool save_time_to_file(char* filename,AnsiString asFormat="")
    {
      // Lokale Zeit einlesen
      time_t tTmp=time(0);
      tm* tmTmp=localtime(&tTmp);
      tTmp.~time_t();
    
      // Wenn Datei nicht geöffnet/erzeugt werden konnte, false zurückliefern
      FILE* fp;
      if((fp=fopen(filename,"w"))==NULL)
      {
        delete fp;
        delete tmTmp;
        return false;
      }
    
      // Andernfalls Beschriftung vorbereiten
      AnsiString sTime, sSec, sMin, sHour, sDay, sMon;
      if(tmTmp->tm_sec<10)
        sSec="0";
      if(tmTmp->tm_min<10)
        sMin="0";
      if(tmTmp->tm_hour<10)
        sHour="0";
      if(tmTmp->tm_mday<10)
        sDay="0";
      if(tmTmp->tm_mon<9)
        sMon="0";
      if(asFormat!="")
        sTime=StringReplace(
              StringReplace(
              StringReplace(
              StringReplace(
              StringReplace(
              StringReplace(asFormat,"S",sSec+IntToStr(tmTmp->tm_sec),TReplaceFlags()<<rfReplaceAll),
              "I",sMin+IntToStr(tmTmp->tm_min),TReplaceFlags()<<rfReplaceAll),
              "H",sHour+IntToStr(tmTmp->tm_hour),TReplaceFlags()<<rfReplaceAll),
              "D",sDay+IntToStr(tmTmp->tm_mday),TReplaceFlags()<<rfReplaceAll),
              "M",sMon+IntToStr(tmTmp->tm_mon+1),TReplaceFlags()<<rfReplaceAll),
              "Y",IntToStr(tmTmp->tm_year+1900),TReplaceFlags()<<rfReplaceAll);
      else
        sTime=sDay+IntToStr(tmTmp->tm_mday)
             +"."
             +sMon+IntToStr(tmTmp->tm_mon+1)
             +"."
             +IntToStr(tmTmp->tm_year+1900);
             +" - "
             +sHour+IntToStr(tmTmp->tm_hour)
             +":"
             +sMin+IntToStr(tmTmp->tm_min)
             +":"
             +sSec+IntToStr(tmTmp->tm_sec);
    
      // Datei beschreiben
      fwrite(sTime.c_str(),sTime.Length(),1,fp);
    
      // Datei schließen
      fclose(fp);
    
      // Speicher freigeben und Erfolg zurückgeben
      delete fp;
      delete tmTmp;
      return true;
    }
    


  • Anhang: Erscheint im ersten Moment kompliziert/zu lang, aber Vorteil ist einfach, dass man das Format selbst bestimmen kann.



  • bool save_time_to_file(String &filename,String &format,TDateTime &zeit)
    {
       try
       {
          String text;
          DateTimeToString(text,format,zeit);
          TFileStream *file=new TFileStream(filename,fmCreate);
          file->Write(text.data(),format.Length());
          delete file;
          return true;
       }
       catch(...)
       {
          return false;
       }
    }
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       TDateTime aktzeit=aktzeit.CurrentDateTime();
       if(save_time_to_file("c:\\blabla.txt","hhnnssmmddyyyy",aktzeit)) Edit1->Text ="gespeichert.";
       else Edit1->Text ="Fehler beim Schreiben !";
    }
    


  • Hab es jetzt erst mal so gelöst, ist aber nur für die Zeit:

    //aktuelle Zeit erzeugen
    TDateTime DateTime;
    int time;
    time = (int) (1000*60*60*24* DateTime.CurrentTime()); //msekunden
    time = time/1000; //Zeit in Sekunden
    int sec=time % 60; //Sekunden
    time /=60;
    int min=time % 60; //Minuten
    time /=60;
    int hr=time; //Stunden

    fprintf(Daten, "%02d:%02d:%02d \n",hr,min,sec);

    Ist eigentlich sehr einfach.
    Muss nur noch was haben für das Datum.



  • Anhand Deines ersten Codefragments:

    ofstream datei;
    
    datei.open("C:\\Wetterstation\\Daten.txt" , ios_base::app);
    
    datei<<Temperatur<<'\t'<<Luftdruck<<'\t'<<Feuchte<<'\t'<<Windstaerke<<'\t'<<t<<endl;
    datei << Now().FormatString("DD.MM.YYYY HH:NN:SS").c_str();
    
    datei.close();
    

    In die Headerdatei muß rein

    #include <fstream>
    using namespace std;
    

    So, Schluß jetzt 😉



  • @_Meier: OK, ich nehem meins zurpück... es geht offensichtlich immer kürzer 👍 Naja, vermutlich war ich einfach nur zu müde *ausred*


Anmelden zum Antworten