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; //Stundenfprintf(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*