ofstream



  • 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