Datei einlesen - Original-Quellcode, funzt nicht
-
Hm, einerseits beruhigt es mich, dass es tatsächlich funzt, andererseits beunruhigt es mich, dass es eben bei mir nicht läuft. Der Laptop gehört voll und ganz mir, dahe rsind mir keine Einschränkungen bekannt. Sehr mysteriös ...
Ich werde das morgen mal auf einem anderen Rechner probieren. Danke Dir!
-
Bitte probier mal das
ifstream datei("test.txt"); assert(datei.fail() == false);
oder das
ifstream datei("test.txt"); assert(!datei == false);
Und inkludiere bitte mal
#include <cassert>
.bool operator!() const;
(Mitgliedsfunktion) macht das gleiche wiebool fail() const;
.
Sie liefernfalse
, wenn etwas schiefgelaufen ist.
-
@dozgon sagte in Datei einlesen - Original-Quellcode, funzt nicht:
#include <cassert>
Dann ist die Fehlermeldug die Folgende:
Assertion failed: datei.fail() == false, file C:\Users\mail\OneDrive\Dokumente\Cpp\Loeviscoach\Datei_lesen.cpp, line 15
In zeile 15 steht bei mir
assert(datei.fail() == false);
-
Die Datei "test.txt" muss, wenn du sie ohne Pfadangabe öffnest, im aktuellen Arbeitsverzeichnis liegen. Wenn du z.B. das Programm aus Visual Studio startest, dann ist das typischerweise das Verzeichnis wo auch die
.vcxproj
Datei liegt.
-
Also gibt es offenbar ein Problem beim Einlesen der Datei.
Ich habe noch vergessen, meine Referenzen hinzuzufügen:
https://cplusplus.com/reference/ios/ios/operator_not/
Also, wenn Du magst, kannst Du Dir merken, dass man Operatoren wie
!
und+
bzw.operator!()
undoperator+()
überladen kann in C++.
Das sind einfach nur Mitglieds-Funktionen (in einer Klasse) oder halt freie Funktionen (nicht in einer Klasse deklariert), die halt spezielle "Namen" bzw. Zeichen haben (+
,!
).Mit
assert
machst Du "Zusicherungen".
Du sicherst Dir Sachen zu wie das:assert(2 + 2 == 4);
Oder, sinnvoller, wie das:
assert(sizeof(int) == 4U);
-
Hm, meine test.txt-Datei war durchaus im entsprechenden Ordner. Davor habe ich es auf dem Desktop gehabt und auch tatsächlich die ADresse vom Desktop so angegeben, wie es Loviscach in seinem Video gemacht hat. Beides hilft nicht...
-
@Hawaiihemd, entschuldige, ich glaube mein Beitrag, war wohl unnötig (das mit der Überladung und dem
assert
).Das verwirrt glaube ich eher als dass es hilft.
Also bitte ignorieren, falls es Dich verwirrt.
Zum Problem:
Weißt Du, wo die
.exe
liegt?
Also die ausführbare Datei?
Kannst, wenn Du magst, probieren, ob das funktioniert, wenn Du Deine.exe
und die Datei im gleichen Ordner hast.
Dann kannst Du ja, wenn Du magst, einfach mal den Pfad auf "test.txt" setzen.
-
Die Exe-Datei liegt auch im selben Ordner. Aber wenn ich die öffne, passiert da sgleiche. Also jetzt auch wieder die Fehlermeldung. Aber in der txt-Datei ändert sich nichts.
Und als Pfad habe ich ja im QUelltext test.txt stehen...
-
@Hawaiihemd Das ist echt komisch.
Also die Datei kann nicht geöffnet werden, dass haben wir durch das
assert
(Nachprüfung oder Zusicherung) herausgefunden.
-
Ich probiere das wirklich mal von einem anderen Rechner. Dann stimmt einfahc mit meionem laptop irgendwas nicht. Andere Beispiele aus anderen Videos und aus Büchern funktionieren. Dann hänge ich mich da jetzt mal nicht auf...
Vielen Dank für die Hilfen!!!
-
Kannst du deine Datei mit einem Texteditor öffnen? Wie führst du die exe aus?
Öffne mal die Konsole, navigier in den Ordner in dem die Exe liegt und starte die Exe von da aus.
-
@dozgon sagte in Datei einlesen - Original-Quellcode, funzt nicht:
Also die Datei kann nicht geöffnet werden, dass haben wir durch das assert (Nachprüfung oder Zusicherung) herausgefunden.
Ganz abgesehen davon, dass man eine Dateioperation wie das Öffnen einer Datei überprüfen muss, halte ich
assert
dafür für falsch. Mit Assertions sichert man Dinge ab, die immer funktionieren müssen - und weil sie IMMER funktionieren müssen, braucht man diese Dinge nur im Debugging zu testen. Dateioperationen dürfen aber fehlschlagen. Daher sind Assertions hier fehl am Platze.
-
Du magst ja recht haben, ich finde es dennoch nicht verkehrt, mit
assert
zu arbeiten.
Zumal man ja auch die Zusicherungen mit#define NDEBUG
abstellen kann.Man kann natürlich auch bedingte Anweisungen (
if
) bzw. Verzweigungen (if
undelse
) verwenden.
Ist halt mehr Schreibaufwand und eigentlich auch korrekter.Ich möchte dieses Thema aber nicht weiter entgleisen.