get() liest keine Zeichen aus Datei
-
@manni66 sagte in get() liest keine Zeichen aus Datei:
Der Pfad muss halt Zeichen für Zeichen stimmen. Du arbeitest als Benutzer Verschiedenes?
Nein, das /home-Verzeichnis (als separate Partition) enthält sowohl das Benutzerverzeichnis (yadgar) als auch auf derselben Verzeichnisebene sämtliche Daten! Also müsste /home/Verschiedenes/Orte/Testverzeichnis/Aach_Hegau_Wikipedia.html der richtige Weg zur auszulesenden Datei sein!
Und trotzdem gibt datei.open(fullpath.c_str(), ios_base::in) ein false zurück!
-
@Yadgar
Könnte es sein, dass sich irgendwo ein Stringende-NULL reingeschmuggelt hat?
-
@Yadgar wie?
-
kopiere den Dateinamen, den dein Programm ausgibt, öffne ein Terminal und führe less Dateiname aus
-
füge unmittelbar nach open
perror(”open”);
ein. Möglicherweise musst du noch#include <stdio.h>
einfügen.
-
-
@manni66 sagte in get() liest keine Zeichen aus Datei:
- kopiere den Dateinamen, den dein Programm ausgibt, öffne ein Terminal und führe less Dateiname aus
Dann wird der Inhalt der Datei genau so angezeigt, wie KWrite ihn darstellen würde!
- füge unmittelbar nach open
perror(”open”);
ein. Möglicherweise musst du noch#include <stdio.h>
einfügen.
Dann bekomme ich das hier:
.
Vollständiger Pfad: /home/Verschiedenes/Orte/Testverzeichnis/.
open: SuccessAach_Hegau_Wikipedia.html
Vollständiger Pfad: /home/Verschiedenes/Orte/Testverzeichnis/Aach_Hegau_Wikipedia.html
open: Is a directory
Die Datei kann nicht geöffnet werden!Was soll das?!?
-
Es sieht so aus, als konnte ich mein Problem lösen: um nicht mit den Standard-Verzeichniseinträgen "." und ".." ins Gehege zu kommen, teste ich vor dem Öffnen auf "html" als Bestandteil des Gesamtpfades!
Dann wird tatsächlich nur die Wikipedia-Quelltextdatei geöffnet und testhalber angezeigt!
Der relevante Code sieht jetzt so aus:
dir = opendir(path); while (dir) { entry = readdir(dir); if (!entry) break; name = entry->d_name; cout << name << endl; // Testausgabe des Dateinamens string fullpath = string(path); fullpath.append(string(name)); // cout << "Vollständiger Pfad: " << fullpath << endl; if (fullpath.find("html") != -1) { datei.open(fullpath.c_str(), ios_base::in); // perror("open"); if (datei) { while (datei.get(c)) { // cout << c << endl; // Kontrollausgabe Zeichen für Zeichen source.push_back(c); } cout << source << endl; } else { cerr << "Die Datei kann nicht geöffnet werden!" << endl; return -1; } } } Bis bald im Khyberspace! Yadgar
-
Deine Lösung passt allerdings nicht zu dem vorherigen Problem die Datei lässt sich nicht öffnen.
-
@manni66 sagte in get() liest keine Zeichen aus Datei:
Deine Lösung passt allerdings nicht zu dem vorherigen Problem die Datei lässt sich nicht öffnen.
O.k., die Lösung ist damit ungültig, und ich muss mein Programm unverzüglich löschen, damit die Form gewahrt bleibt! Tja, in der richtigen (Programmierer-)Welt geht halt ein Problem in das andere über, das lässt sich nicht immer so clean voneinander wegschubladisieren...
-
@Yadgar sagte in get() liest keine Zeichen aus Datei:
@manni66 sagte in get() liest keine Zeichen aus Datei:
Deine Lösung passt allerdings nicht zu dem vorherigen Problem die Datei lässt sich nicht öffnen.
O.k., die Lösung ist damit ungültig, und ich muss mein Programm unverzüglich löschen, damit die Form gewahrt bleibt! Tja, in der richtigen (Programmierer-)Welt geht halt ein Problem in das andere über, das lässt sich nicht immer so clean voneinander wegschubladisieren...
Du redest dummes Zeug.
-
@Yadgar sagte in get() liest keine Zeichen aus Datei:
/home/Verschiedenes/Orte/Testverzeichnis/Aach_Hegau_Wikipedia.html
Wenn die Datei wirklich dort ist dann reicht
std::ifstream is{ "/home/Verschiedenes/Orte/Testverzeichnis/Aach_Hegau_Wikipedia.html" };
-
@Yadgar
Kann es sein das "datei" vor Gebrauch durch datei.open(blabla) initialisiert werden muss?
Sieh dir folgendes Beispiel anifstream In = ifstream("input.txt"); if(!In.is_open()) { printf_s("not open :(\n"); return -1; }
-
@Yadgar
Ah eben dein Fehler liegt in "if(datei)" der muss "if(datei.is_open())" lauten
-
@EL-europ sagte in get() liest keine Zeichen aus Datei:
@Yadgar
Ah eben dein Fehler liegt in "if(datei)" der muss "if(datei.is_open())" lautenNein.
-
-
@Swordfish
Ich hab nur oberflächlich Ahnung von cpp. Muss "datei erst zu bool gecastet werden bevor ich einfach if(datei) prüfe?zu ifstream.is_open() hab ich folgndes gefunden
https://www.cplusplus.com/reference/fstream/ifstream/is_open/
Dort steht das mit is_open() gerprüft wird ob ein Stream mit dem ifstream-Objekt assoziiert ist, das bedeutet doch "geöffnet"?
-
@EL-europ sagte in get() liest keine Zeichen aus Datei:
Ich hab nur oberflächlich Ahnung von cpp.
Und deswegen sind Aussagen wie
@EL-europ sagte in get() liest keine Zeichen aus Datei:
dein Fehler liegt in "if(datei)" der muss "if(datei.is_open())" lauten
problematisch. Deine Antwort ist nämlich falsch und irreführend.
Muss "datei erst zu bool gecastet werden bevor ich einfach if(datei) prüfe?
zu ifstream.is_open() hab ich folgndes gefunden
https://www.cplusplus.com/reference/fstream/ifstream/is_open/
Dort steht das mit is_open() gerprüft wird ob ein Stream mit dem ifstream-Objekt assoziiert ist, das bedeutet doch "geöffnet"?Nein, nein, nein. Die Prüfungen waren schon richtig so, vor deinen "Korrekturen". Wie es richtig aussieht, siehst du ja, und es wurden auch Anleitungen verlinkt. Was soll man da noch groß erklären, außer dass deine Interpretationen der Anleitungen falsch sind? Eine Kompletterklärung zu den Grammatikregeln von C++ im allgemeinen, und der Anwendung derselben auf die Streamschnittstellen im speziellen würde zu weit führen. Du brauchst halt mehr Erfahrung, dann beantwortet sich das alles von alleine.
-
@EL-europ Die Condition eines if-Statements wird immer implizit zu bool konvertiert.
-
@SeppJ
Ja da hast du wohl recht!
ich bin mit gefährlichem Halbwissen und einem funktionierenden Testergebnis vorschnell gewesen, und das auch noch im Nachhinein