Probleme beim Lesen einer Datei
-
Hallo
Also ich schreibe folgendes Programm: Ich habe eine csv Datei in der es mehrere Eitraege gibt. Diese Eintraege sind dafuer gedacht um eine Datenbank zu aktualisieren. Allerdings moechte ich aus Sicherheits-Gruenden eine Temporaere Datei erstellen und von dort die Daten Zeilenweise lesen. Die Tmp-Datei wird auch erstellt mit den richtigen Werten. Allerdings scheint es als ob die tmp-Datei Leer ist den es wird nichts ausgegeben. Ich benutze folgendes.
ich habe eine Methode Read() die so aussieht:
std::filebuf buf; std::fstream file; /... DoOpen(buf, std::ios_base::in); DoCreateTemporary(buf, file); DoGoCurPos(file); DoRead(file);Die Definitionen der Methoden sehen so aus:
void DoOpen(std::filebuf& buffer, std::ios_base::openmode mode) { buffer.open(GetName().c_str(), mode); if(!buffer.is_open()) throw std::exception("can't open the buffer"); } void DoCreateTemporary(std::filebuf& buffer, std::fstream& fileTmp) { fileTmp.open(GetTempName().c_str(), std::ios_base::out); if(!fileTmp) throw std::exception("Can't open temporary"); std::istream input(&buffer); fileTmp << input.rdbuf(); buffer.close(); } // Momentan lese ich die ganze Datei in einem Rutsch // von da her weiss ich nicht ob diese Methode zu viel // des Guten ist void DoGoCurPos(std::fstream& fileTmp) { fileTmp.seekg(GetPosMark()); } // Hier muss der Fehler schon passiert sein // line bleibt auch nach der getline Funktion leer void DoRead(std::fstream& fileTmp) { std::string line; while(fileTmp) { std::getline(fileTmp, line); internalStorage_.push_back(line); line.clear(); if(fileTmp.eof()) fileTmp.setstate(std::ios::failbit); } fileTmp.clear(); fileTmp.close(); }Was ich noch sagen sollte ist dass posMark_ im Konstruktor mit std::ios_base::beg initialisiert wird. Der Wert von posMark_ wird in der Methode GetPosMark() abgefragt. Kann mir nicht weiter Helfen, wahrscheinlich benutze ich die stream-Funktionen anscheinend nicht ganz Richtig. Waehre Dankbar wenn mir jemand weiterhelfen koennte.
Liebe Grüße
Spongebob011101
-
Ein kleiner Fehler, große Wirkung: Du hast fileTmp nur zum schreiben geöffnet, deswegen wird das nichts mit dem wiedereinlesen.
Kannst du mal etwas näher erläutern, was das bringen soll, eine Datei in eine andere zu kopieren und dann die Kopie einzulesen? Warum nicht gleich einlesen?
-
Danke erst mal fuer die Antwort. Zur deiner Frage: Ich dachte mir dass vielleicht beim Lesen Die Datei irgendwie beschedigt werden kann :D. Keine Ahnung ob es moeglich ist, aber wenn die Antwort ein klares nein ist wird der Code entsprechend angepasst.
-
Dateien werden durch Lesen nicht beschädigt. Und selbst wenn man mal hypothetisch annimmt, dass sowas möglich wäre: Was glaubst du wohl, was beim Kopieren passiert? Da wird schließlich auch gelesen.