ofstream



  • berniebutt schrieb:

    @volkard & Michael.E
    Ich sehe da keinen oder wenig Widerspruch in unseren Aussagen. Objekte legt man an wenn man sie braucht und gibt sie frei wenn man sie nicht mehr braucht. Dies bei einer Vielzahl der Stream-Objekte als Code-Beispiel zu zeigen ist nicht möglich oder verwirrt den Fragesteller. Wir wollen doch uns nicht gegenseitig überzeugen, sondern dem Fragesteller eine Hilfe geben. Nachdenken und machen soll er selbst! 🙂

    An open und close erkennt man schlechten Code und schlechte Bücher.
    Fertig.



  • volkard schrieb:

    An open und close erkennt man schlechten Code und schlechte Bücher. Fertig.

    Ein schlechter Code ist nur jener, der ein Programm zum Absturz bringt, instabil macht, oder unnötig Ressourcen (Laufzeit, Speicher) beansprucht.
    daddeldu - ich habe fertig! :p



  • berniebutt schrieb:

    Ich sehe da keinen oder wenig Widerspruch in unseren Aussagen.

    Ähh, doch. Du willst open und close benutzen und volkard und ich wollen das nicht. Reicht das nicht?

    Objekte legt man an wenn man sie braucht und gibt sie frei wenn man sie nicht mehr braucht.

    Machst du anscheinend nicht.

    Wir wollen doch uns nicht gegenseitig überzeugen,

    Doch.

    sondern dem Fragesteller eine Hilfe geben.

    Das geschieht dann automatisch.



  • Hallo zusammen,
    nachdem eigentlich alles erfolgreich funktioniert hat, stehe ich nun vor einem Problem. Ich möchte, dass der Benutzer einen Dateipfad mit dem Dateinamen und der Endung eingibt und daraufhin die entsprechende Datei erstellt wird.

    Wenn ich im Quelltext den ganzen Pfad eingebe, dann funktioniert es, doch sobald der Benutzer über die Konsole den Pfad eingibt, funktioniert nichts mehr. Könnt ihr mir sagen warum?

    Hier ist der Quelltext:

    #include <iostream> 
    #include <string>
    #include <fstream>
    using namespace std; 
    
    void getDir(string& fl1, string& fl2, string& of1) //Liest Dateipfade aus
    {
    	string dirf1, dirf2, diro1;
    	cout << "Bitte geben Sie den Pfad der ersten Datei an!\n"
    		 << endl;
    	getline(cin, dirf1);
    
    	cout << "Bitte geben Sie den Pfad der zweiten Datei an!\n" 
             << endl;
    	getline(cin, dirf2);
    
    	cout << "Bitte geben Sie das Zielverzeichnis mit Dateinamen an!\n" 
             << endl;
    	getline(cin, of1);
    	if(dirf1 == dirf2)
    		cout << "Sie muessen zwei verschiedenen Dateien angeben!" << endl;
    	else
    	{
    		fl1 = dirf1;
    		fl2 = dirf2;
    	}
    
    }
    
    int main()
    {
    	string inFile1, inFile2, outFile;
    	getDir(inFile1, inFile2, outFile);
    	//ifstream inf1(inFile1.c_str()),
    	//		 inf2(inFile2.c_str());
    
    	ofstream outf(outFile.c_str()); //Datei wird nicht angelegt. Die untere if - Bedingung ist true
    
    	cout << outFile << endl; //Der Pfad stimt. Wenn ich ihn direkt in den Konstruktor von outf eingebe, dann funktioniert alles
    	if(/*!inf1|| !inf2 ||*/ !outf)
    	{
    		cout << "Fehler beim Oeffnen/Schreiben der Dateien" << endl;
    		return 0;
    	}
    
    	return 0;
    }
    

    Wisst ihr, wo der Fehler lieg?

    Vielen Dank
    lg, freakC++



  • Der Pfad stimmt nicht. 😉



  • doch. Ich gebe ihn ja aus und er ist korrekt!

    Kann es sein, dass .c_str() da was verfälscht?

    lg, freakC++



  • Poste mal, wie der Pfad aussieht, wenn Du in direkt angibst, und wie er aussieht, wenn Du ihn per std::cin übergibst.



  • So gebe ich ih in den Quelltext ein:
    C:\\Dokumente und Einstellungen\\freakC++\\Desktop\\Test4.txt

    So in die Konsole:
    C:\Dokumente und Einstellungen\freakC++\Desktop\Test4.txt

    Ich hab ersteren auch mal in die konsole eingegeben. Bringt nichts. Ich habe .c_str() im Verdacht?!

    lg, freakC++

    edit: .c_str() behält doch Leerzeichen?



  • Was für einen Compiler in was für einer Version benutzt Du?



  • Da sind doch Leerzeichen im Pfad. Das wird bei Eingabe in der Konsole aufgetrennt wenn du keine Anführungsstriche drum machst.
    Übrigens kannst du unter Windows statt \\ auch / verwenden.



  • Visual Studio 2008

    Glaub aber eher, dass es am Code liegt.

    lg, freakC++



  • Braunstein schrieb:

    Da sind doch Leerzeichen im Pfad. Das wird bei Eingabe in der Konsole aufgetrennt wenn du keine Anführungsstriche drum machst.

    Also bei mir nicht. Sollte bei std::getline auch nicht so sein.
    Der Code läuft bei mir.

    Bitte geben Sie den Pfad der ersten Datei an!
    
    E:\test ver zeich nis\a.txt
    Bitte geben Sie den Pfad der zweiten Datei an!
    
    E:\test ver zeich nis\b.txt
    Bitte geben Sie das Zielverzeichnis mit Dateinamen an!
    
    E:\test ver zeich nis\c.txt
    E:\test ver zeich nis\c.txt
    Drücken Sie eine beliebige Taste . . .
    

    in E:\test ver zeich nis: c.txt



  • Mit getline funktioniert das mit den Leerzeichen aber. Jedenfalls wird der Pfad nach der Eingabe korrekt ausgegeben und zwar mir allen Leerzeichen.

    lg, freakC++

    edit. Ich habe jetzt mal einen Pfad verwendet, der keine Leerzeichen hat. Dabei funktioniert es. Es hat also damit etwas zu tun. Wo machen die denn Schwierigkeiten? Ich benutze doch getline.


Anmelden zum Antworten