Frage Ein- und Ausgabe mit Datein

10/05/2014 20:13 KingwondA#1
Das Beispielprogramm "Lesen einer Textdatei".
Egal was ich mache, es kommt immer die Fehlermeldung.
Code:
#include <string>
#include <fstream>
#include <iostream>
using namespace std;

int main() {
	string quelldateiname;
	cout << "Quelldatei? ";
	cin >> quelldateiname;
	ifstream quelle(quelldateiname); // Objekt für Eingabestrom
	if (!quelle) {                   // Fehlerabfrage
		cerr << quelldateiname << " kann nicht geöffnet werden!\n";
	}
	else {
		// Lesen der Datei und Anzeige der Zeilen
		while (quelle) {
			string zeile;
			getline(quelle, zeile);
			cout << zeile << endl;
		}
	}
} // Datei wird am Programmende automatisch geschlossen.
10/05/2014 20:26 snow#2
Schon mal geschaut, wie der quelldateiname-String aussieht?

Dieser Code funktioniert problemlos:
Code:
#include <string>
#include <fstream>
#include <iostream>

int main()
{
    std::string quelldatei;
    std::cout << "Quelldatei?" << std::endl;
    std::getline(std::cin, quelldatei);
    
    std::ifstream quelle{ quelldatei };
    
    if (!quelle) 
    {
        std::cerr << quelldatei << " kann nicht geöffnet werden!\n";
    } else
    {
        for (std::string line; std::getline(quelle, line); )
        {
            std::cout << line << std::endl;
        }
    }
}
10/06/2014 00:19 KingwondA#3
Den quelldateiname-String soll man ja eingeben.
Aus diesen Grund ist ja auch die Eingabe mit "cin >>" vorhanden.
10/06/2014 00:58 Computerfreek#4
Er meinte viel mehr wie der String selbst aussieht. Du musst bei den Pfaden beispielsweise escaping beachten; somit wird aus \ dann \\ und so weiter.
10/06/2014 07:26 Schlüsselbein#5
Benutze std::getline aus <string> statt den operator>> von std::cin.
Warum, erklär ich dir heute Nachmittag in nem Edit oder jemand anders der schneller ist.
10/06/2014 16:14 Delinquenz#6
Quote:
Warum, erklär ich dir heute Nachmittag in nem Edit oder jemand anders der schneller ist.
Weil der std::iostream:: operator>>() bei einem Whitespace stoppt, während std::getline() bis zum Abgrenzungsbuchstaben einliest. Dieser ist, sofern nicht spezifiziert, ein '\n'. Heißt im Klartext: Alles bis zum Enter wird eingelesen, während bei std::cin >> das Einlesen nach einem Leerzeichen bereits beendet wird.
10/06/2014 17:00 KingwondA#7
Quote:
Originally Posted by Delinquenz View Post
Weil der std::iostream:: operator>>() bei einem Whitespace stoppt, während std::getline() bis zum Abgrenzungsbuchstaben einliest. Dieser ist, sofern nicht spezifiziert, ein '\n'. Heißt im Klartext: Alles bis zum Enter wird eingelesen, während bei std::cin >> das Einlesen nach einem Leerzeichen bereits beendet wird.
Wenn ich nun aber kein Leerzeichen eintippe, dann müsste das Programm doch klappen. Was es aber nicht will :confused:
10/06/2014 21:37 Padmak#8
Keine Ahnung was du machst, bei mir funktioniert dein originaler Code problemlos.

Code:
F:\dev\mingw32\bin>g++ -std=c++11 main.cpp -o aaa_main.exe

F:\dev\mingw32\bin>aaa_main
Quelldatei? test.txt
as÷dgiasnegls
Was gibst du denn ein als Dateiname?

Padmak
10/07/2014 00:17 KingwondA#9
Klappt alles, danke Padmak.
Das Programm, und die zu öffnende Datei müssen im selben Ordner sein.