Frage zu "Datei einlesen"
-
Hi Leute!
Ich hab hier einen Code von der c++ referenz:
#include <iostream> #include <fstream> using namespace std; int main () { char c, str[256]; ifstream file; cout << "Enter the name of an existing text file: "; cin.get (str,256); file.open(str); // open file while (file.good()) // loop while extraction from file is possible { c = file.get(); // get character from file if (file.good()) { cout << c; } } file.close(); // close file return 0; }Wenn ich nun die Datei "datei.txt", die im gleichen Ordner wie die main.cpp liegt, öffnen will, funktioniert das leider nicht. An was liegt das? Er springt mir vor der while-Schleife schon raus...
-
1. Funktionirt nicht ist keine Problembeschreibung
2. Die Datei wird im working directory geöffnet, die main.cpp interessiert nicht ( im Zweifelsfall ist sie gelöscht oder auf einem anderen Rechner)
-
Es ist erstaunlich wie beliebt die Referenz ist, denn der Code ist anders schlecht.
- Dateiname wird in char-Array gelesen
- Keine Spur von RAII
- Zweifacher Check auf good(), obwohl einer reichen würde und obwohl der Stream nach bool konvertierbar ist.
- (return 0 ist unnötig und using namespace std ist unschön)
Und das in 11 Zeile Code

-
Was heißt workin directory?
Ich hab hier ein MS Visual studion 2010 Projekt offen und ich kann die datei da hinkopieren wo ich will, der öffnet mir die einfach nicht...
Funktioniert nicht heißt er öffnet mir sie nicht. Ich hab eigentlich gedacht, dass ist an dieser Stelle klar.
-
Schreib einfach mal in ne Datei und schau wo sie gespeichert wird.

-
Hab das mal teilweise umgesetzt was fairdiceroll schrieb:
#include <iostream> #include <fstream> int main () { char c; std::string str; std::cout << "Enter the name of an existing text file: "; std::cin >> str; std::ifstream file(str.c_str()); // open file - old style while (file.good()) // loop while extraction from file is possible { c = file.get(); // get character from file std::cout << c; } }Das:
std::ifstream file(str.c_str()); // open file - old stylesollten die aktuellen C++11 Compiler auch ohne:
.c_str()können. Oder?
-
Etwas übersehen - es wird noch ein Zeichen geschrieben, wenn die Datei "bad".

Dann doch:
while (file.good()) // loop while extraction from file is possible { c = file.get(); // get character from file if (file.good()) // => because the last char if file not good std::cout << c; }oder zeigt die bessere Lösung.
-
Wie ich mir das vorstelle:
int main () { std::cout << "Enter the name of an existing text file: "; std::string str; getline(std::cin, str); if (std::ifstream file{str}) // diese Zeile ist C++11 for (char c=file.get(); file; c=file.get()) std::cout << c; }
-
Weil es zu Lernzwecken ist, alternativ auch
if (std::ifstream file{str}) for (;;) { char c = file.get(); // extract char if (!file) // c may have the value of Traits::eof() break; // then we have finished std::cout << c; }Lustigerweise steht auf der C++ Referenz nichts von
Traits::eof(). Das musste ich auf der wahren Referenz nachschauen.