Dateihandling in Klassen
-
Hi Leute
ich wollte mal eine Klasse zur Dateiverwaltung schreiben!
Es funzt aber nicht, d.h. es kommt kein Fehler, aber das Prog macht nix (keine Datei erstellen, nix schrieben etc..)Hier code
#include <vcl.h> #pragma hdrstop #include <iostream> #include <conio> #include <fstream> #include <string> #include <iomanip> using namespace std; //--------------------------------------------------------------------------- #pragma argsused class Filer //Klasse zur Dateiverwaltung { public: Filer(string filename); ~Filer(); void TextIn(); //EInschrieben des Textes private: const char* Text(); bool FileExist(); //Ob Datei existiert bool Overwrite(); //ob Überschrieben werden soll string file; //filename fstream* out; //fstream-objekt }; Filer::Filer(string filename) { file=filename; out= new fstream(file.c_str()); //dateiobjekt erstellen } const char* Filer::Text() { string Text; cout<<"Geben Sie Text ein:"<<endl; //für textübergabe getline(cin,Text); return Text.c_str(); } Filer::~Filer() { delete out; //dstor } bool Filer::Overwrite() { string ans; cout<<"Datei existiert bereits, soll der Inhalt überschrieben werden?(j/n)"; cin>>ans; if(ans=="j") //überschrieben bei "j" return true; else if(ans=="j") //nicht bei "n" return false; else { cout<<"Falsche Eingabe, nochmal!"; return Overwrite(); //wenn falsche auswahl, erneutes aufrufen } } bool Filer::FileExist() { if(out->good()) //wenn datei existiert, true { return true; } else return false; } void Filer::TextIn() { if(FileExist()==true) { if(Overwrite()==true) { out->setstate(ios::trunc|ios::binary); //datei existiert, und soll out->write(Text(),100); //überschrieben werden } else { out->setstate(ios::app|ios::binary); //nicht überschreiben out->write(Text(),100); } } else { out->setstate(ios::binary); //datei anlegen out->write(Text(),100); } } int main(int argc, char* argv[]) { Filer text("text.txt"); text.TextIn(); getch(); return 0; } //---------------------------------------------------------------------------kann mir jemand mal die Fehler erklä#ren?
-
habe mir nun nicht alles angeguckt, aber es sollte:
out->open(file.c_str(), ios_base::out);heißen...
P.S.:
1.anstatt der methoden "FileExist()" und "Overwrite" würde ich eifach bool variablen nehmen...
2. den Filenamen musst du gar nicht speichern, da du ihn eh nie wieder verwendest...
3. übergebe dem konstuktor ein const string&, dadurch sparst du dir unnötiges kopieren und es wird sichergestellt, dass der dateiname nicht verändert wird...
4. es heißt #include <conio.h>...
-
hm....wenn ich das jetzt os verändere, dann sagt er mir immer, das die datei schon existiert! Das macht sie aber nciht (SICHER NICHT)
-
du solltest außerdem noch den copy-Ctor sowie den Zuweisungsoperator als private deklarieren, damit du sie nicht aus versehen unbewusst benutzt. Sowas (z.B. temporäre Objekte) könnte ich mir als Quelle für deine Fehlermeldung vorstellen: Du erzeugst irgendwo unwissentlich ein temporäres objekt, für das der compiler einen (von ihm selbst erzeugten) copy-Ctor verwendet und sich dann wundert dass die daei schon existiert (Angaben ohne gewähr, hab den code jetzt nur grob überflogen)