fin.open funzt nicht



  • hallo Community,
    hab ein Problem. Ich schaff es nicht eine erstellt Textdatei zu schliessen und nachher wieder zu öffnen. Möglicherweise wird sie auch geöffnet und der Zeiger steht ganz am ende. So genau weiß ich das leider noch nicht zu beurteilen. Der Code sieht so aus:

    #include<iostream>
    #include<fstream>
    using namespace std;
    
    int main()
    {
    	char fileName[80];
    	char buffer[255];
    	cout << "Bitte Dateiname eingeben: ";
    	cin >> fileName;
    
    	ifstream fin(fileName);
    	if (fin) {
    		cout << "Aktueller Dateiinhalt: \n";
    		char ch;
    		while (fin.get(ch)) {
    			cout << ch;
    		}
    		cout << "\n***Ende des Dateiinhalts***\n";
    	}
    	fin.close();
    
    	fin.open(fileName);
    	if (!fin) {
    		cout << "Es ist nicht möglich " << fileName << " zum Lesen zu öffnen" << endl;
    		return (1);
    	}
    
    	cout << "\nSo lautet der Inhalt der Datei: " << endl;
    	char ch;
    	while (fin.get(ch));
    		cout << ch;
    	cout << "\n***Ende des Dateiinhalts***\n";
    	fin.close();
    
    	return 0;
    }
    

    die fin.open-Funktion läuft einfach nicht. Es erscheint dann immer "Es ist nicht möglich <filename> zum Lesen zu öffnen"
    ich benutze übrigens den g++ Compiler. Beim kompilieren selbst gibts keine Fehlermeldungen. Ich hoffe ihr könnt mir helfen

    mfg Phil



  • Wenn du beim ersten Lesen auf EOF stösst dann wird ausserdem auch das failbit
    gesetzt. Durch das close() wird der Fehlerstatus NICHT bereinigt. Wenn du dann
    anschliessend das Ergebnis von open() prüfst stösst du wieder auf diesen "alten"
    Fehler.
    Um das zu verhindern kannst du beispielswiese vor dem open() die Funktion clear()
    aufrufen um den Fehlerstatus zu löschen und schon gehts. 😉



  • danke für die schnelle Antwort. Also das Öffnen mit fin.open() geht jetzt. Allerdings scheint der zeiger trotzdem noch am ende der Datei festzuhängen. Er liest nämlich nix aus sonder öffnet und schliesst nur. Kann ich irgendwie öffnen und ihn dabei an den Anfang springen lassen? z.B. fin.open(fileName,ios::zum_Anfang_springen) ? Oder kann man die Zeigerposition irgendwie löschen?

    edit: ok, Kommando zurück! Das clear() ist scheinbar notwendig. Hatte aber noch nen bescheuerten Fehler drin. hatte ein Smikolen am ende der while-Anweisung. Jetzt geht alles!!!


Anmelden zum Antworten