Schreiben in Datei geht nicht DRINGEND!!!!



  • nach den close muss noch ein clear() damit die flags wie eof, bad und co resetet werden
    ein versäumnis der stl das open() das nicht gleich mit macht



  • das clear() bringt auch nichts.



  • was mache ich hier falsch? meine klasse sieht so aus (auszugsweise):

    template<class T> class Graph {
    
    	private:
    		Vertex<T>* rootVertex;
    		string fileName;
    		fstream dataFile;
    
    	public:
    		Graph(string fileNameValue, Vertex<T>* rootVertexValue = NULL) {
    			fileName = fileNameValue;
    			rootVertex = rootVertexValue;
    		}
    		void setRootVertex(Vertex<T>* value) {
    			rootVertex = value;
    		}
    		void insVertex(Vertex<T>* vertex) {
    
                      }
    		void insEdge(string vertexNameFrom, string vertexNameTo, string edgeWeight) {
    		}
    		void read() {
    			dataFile.open(fileName.c_str(), ios_base::in);
    		}
    		void write() {
    			Vertex<T>* tempVertex;
    			tempVertex = (Vertex<T>*)rootVertex;
    			dataFile.open(fileName.c_str(), ios_base::out | ios_base::in | ios_base::trunc);
    			dataFile.clear();
    			while (tempVertex != NULL) {
    				dataFile << tempVertex->getElement() << "\n";
    				cout << tempVertex->getElement();
    				tempVertex = (Vertex<T>*)tempVertex->getPointerOne();
    			}
    			dataFile.close();
    		}
    
    };
    

    Wieso ist die Datei nach write() zwar angelegt aber leer? (bei tempVertex->getElement() kommt was raus, hab ich getestet)



  • Rufst Du zuvor read auf ? Da steht kein close()



  • read() wird nicht aufgerufen. das open() steht da momentan nur so, die methode ist noch nicht fertig.



  • dataFile.open(fileName.c_str(), ios_base::out | ios_base::in | ios_base::trunc); 
                dataFile.clear();
    

    zu

    dataFile.clear(); 
    dataFile.open(fileName.c_str(), ios_base::out | ios_base::in | ios_base::trunc);
    

    try it pls



  • bringt leider auch nichts



  • versuch mal:

    dataFile << tempVertex->getElement();
    datafile.flush();
    

    flush() schiebt gepufferte Bytes noch nach.



  • hilft leider auch nicht. was mich halt wundert ist dass, wenn ich einen stream lokal in der funktion deklariere, es funktioniert.



  • Funktioniert der Codeschnipsel ?

    #include <iostream>
    #include <algorithm>
    #include <iterator>
    #include <fstream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	fstream datei("c:\\test.txt",ios::in|ios::out);
    
    	cout<<datei.rdbuf();
    
    	datei.close();
    	datei.clear();
    	datei.open("t:\\test.txt",ios::in|ios::out);
    	if(!datei)
    		cout<<"Funzt nicht\n";
    
    	return 0;
    }
    

    (Ich hatte das Problem auch mal , un nu rätsel ich wieder rum. Die Lösung liegt zu weit weg (zuhause) O🤡 *mal nach hume ruf* )



  • bin mir jetzt nicht sicher, ob's funktioniert. Ich kriege zumindest keine Ausgabe.



  • Na is doch super 🤡

    Dann prüf mal ob die Datei existiert die geöffnet werden soll, ob der Stream vllt. schon offen war...

    dataFile.clear();  
    dataFile.open(fileName.c_str(), ios_base::out | ios_base::in | ios_base::trunc);
    
    if(!dateiFile)
      cout<<"Geht nicht auf, kannst nix reinschreiben\n";
    


  • der text wird nicht ausgegeben, scheint soweit ok zu sein. die datei wird ja auch erzeugt, bleibt aber leer. ich muss jetzt 1-2h studen weg. wäre super wenn du heute abend deine lösung die zu hause ist kurz posten könntest. mein abgabe- termin war eigentlich schon heute. danke!



  • kann mir da keiner helfen?



  • marcoow schrieb:

    der text wird nicht ausgegeben, scheint soweit ok zu sein. die datei wird ja auch erzeugt, bleibt aber leer. ich muss jetzt 1-2h studen weg. wäre super wenn du heute abend deine lösung die zu hause ist kurz posten könntest. mein abgabe- termin war eigentlich schon heute. danke!

    Und so?

    ofstream datei("c:\\test.txt",ios_base::out);
    

    Ansonsten probier es mal indem du deine ausgabe hinten an die datei hängst ob dann was drin steht, mit ios_base::app.

    Code-Hacker



  • bringt auch beides nichts. datei ist zwar angelegt, aber leer.


Anmelden zum Antworten