Schreiben in Datei geht nicht DRINGEND!!!!



  • Warum diese furchtbaren casts? Sind die wirklich nötig und sinnvoll?

    Geh das ganze doch mal in einem Debugger durch und sieh nach was getElement zurückliefert. Die meisten Debugger zeigen den Rückgabewert von Funktionen auch dann an, wenn er nicht weiterverarbeitet wird.

    Warum ist dataFile nicht lokal in write() deklariert?



  • ich habe jetzt

    void write() {
    	Vertex<T>* tempVertex;
    	dataFile.open(fileName.c_str(), ios_base::out | ios_base::trunc);
    	tempVertex = (Vertex<T>*)rootVertex;
    	while (tempVertex != NULL) {
    		dataFile << tempVertex->getElement();
    		cout << tempVertex->getElement();
    		tempVertex = (Vertex<T>*)tempVertex->getPointerOne();
    	}
    	dataFile.close();
    }
    

    Da kommt -so will ich es auch-

    qay
    

    raus (das getElement ist soz. der Name des Vertex), aber die Datei bleibt immer noch leer.



  • es geht, wenn ich den fstream lokal in der methode definiere. laut aufgabe muss der fstream aber in der umschliessenden klasse definiert sein. was muss ich da denn beachten?



  • 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