Dateien: lesen/schreiben
-
Hallo,
ich soll eine Art Logfile für Objekte programmieren, welche sich auf der Konsole bewegen.
Das Schreiben in eine Datei funktioniert einwandfrei:
ostringstream filename; filename << "Crashlog-" << pFC->getID() << ".dat"; ofstream fout(filename.str().c_str(), ios::binary | ios::app); toStream(fout); fout.close();void CrashRecorder::toStream( ostream& os ) { os << daten[dz].crashtime << ", " << daten[dz].id << ", " << daten[dz].loc.xAxis << ", " << daten[dz].loc.yAxis << ", " << daten[dz].dir << ", " << daten[dz].action << endl; }Allerdings weiß ich einfach nicht weiter, wie ich diese Daten dann wieder ausgeben kann.
ifstream fin(filename.str().c_str(), ios::binary ); fromStream(fin); fin.close();void CrashRecorder::fromStream( istream& is ) { is >> daten[dz].crashtime; }Es kommt keine Ausgabe. Wie kann ich das lösen und was ist das Problem?
MfG skizZ
-
Sowas schon mal versucht?
#include <iostream> #include <fstream> #include <windows> using namespace std; int main() { string name; char *text_aus_datei = "test.txt"; ifstream datei; datei.open(text_aus_datei); datei>>text_aus_datei; datei.close(); cout<<text_aus_datei; //text ausgeben return 0; }
-
Hi,
danke erstmal.
allerdings bleibt "datei" leer. Es wird nichts in den Puffer geschrieben

-
Hat denn sonst keiner ne Idee?
-
Ist doch auch klar das nichts in den Puffer geschrieben wird, in dem Beispiel wird ja auch die Datei gelesen, und alles was aus dem Stream kommt wird in das "text_aus_datei" geschrieben. Wenn du eine ganze datei lesen willst probier es mal so
#include<iostream> #include<fstream> #include<string> int main() { std::ifstream datei("Deinedatei.txt"); std::string was_aus_der_datei_kommt; while(getline(date,was_aus_der_datei_kommt)) { std::cout<<was_aus_der_datei_kommt<<std::endl; } datei.close(); return 0; }
-
Hi,
super! das funktioniert schonmal.
Ist es auch möglich nur die letzten 10 Zeilen aus einer Datei auszulesen?
Und wie genau kann ich da umsetzen, dass sich der Dateiname aus Text + Variable zusammensetzt?
Da die Logfiles den Namen haben
Crashlog-<Variable>.dat
-
hi
ich hab es auch mal gelöst in dem vector hast du dann die gesamte datei und kannst damit machen was du willst.
#include <iostream> #include <fstream> #include <string> #include <vector> using namespace std; int main() { string name=""; ifstream datei("test.txt"); vector<string> data_input; while(getline(datei, name)) { data_input.push_back(name); cout << name << endl; } datei.close(); for(int i=0;i<data_input.size();i++) { cout << data_input[i] << endl; } return 0; }das mit dem dateinamen könntest du vlt so machen
#include <iostream> #include <fstream> #include <string> #include <vector> #include <sstream> using namespace std; int main() { string test="test"; ifstream datei; stringstream out; out << 5; test+=out.str(); cout << endl << endl << test << endl; datei.open(test.c_str()); datei.close(); return 0; }mit einen weiteren += kannst du dann noch die dateiendung mit anfügen.
MFG
-
hi, das funktioniert auch wunderbar.
gibt es denn eine möglichkeit den Inhalt eines Vektors umzudrehen? Bzw ihn rückwärts auszugeben?
Weil dann könnte ich ja die Schleife bis 10 laufen lassen und somit nur die letzten 10 Einträge ausgeben!
-
ja du kannst einen vector auch von hinten nach vorne durchgehen
Hab es mal gemacht für die letzten 10 zeilen
#include <iostream> #include <fstream> #include <string> #include <vector> using namespace std; int main() { string name=""; ifstream datei("test.txt"); vector<string> data_input; while(getline(datei, name)) { data_input.push_back(name); cout << name << endl; } datei.close(); // mit rbegin holst du dir den iterator auf den schluss ist wie ein normaler iterator // nur dass er von hinten nach vorne geht vector<string>::reverse_iterator start=data_input.rbegin(); for(int i=9;i>=0;i--) { cout << *(start+i) << endl; } return 0; }
-
skizZ schrieb:
gibt es denn eine möglichkeit den Inhalt eines Vektors umzudrehen? Bzw ihn rückwärts auszugeben?
Umdrehen: STL-Algorithmus
std::reverse().
Rückwärts iterieren:reverse_iterator.