Hallo Leute,
Ich habe eine Frage und zwar will ich eine Datei mit C++ öffnen, jedoch
funktioniert das nicht so ganz wie ich es will. Der Code ist meiner
Meinung nach richtig, aber irgendwo scheint ja wohl doch was falsch zu
sein.
1
#include<iostream>
2
#include<fstream>
3
usingnamespacestd;
4
5
intmain(void)
6
{
7
ifstreamQuelldatei;
8
Quelldatei.open("Datei_1.txt",ios_base::in);
9
if(!Quelldatei)
10
{
11
cerr<<"Eingabe-Datei kann nicht geöffnet werden\n";
12
}
13
14
cin.get();
15
}
Die Datei wird einfach nicht geöffnet und ich weiß ehrlich gesagt nicht
wieso. Eigentlich sollte sich die Datei öffnen und lesen lassen. Oder
seh ich da was falsch?
Danke für jede Hilfe :)
Das sollte so funktionieren, nur dass das Programm so nichts sichtbares
macht. Was passiert denn? Kommt die Fehlermeldung oder bricht schon das
Kompilieren ab?
Beim Mac muss die im Benutzerverzeichnis liegen, bei Windows soweit ich
weiß im Ausgabeverzeichnis, also da, wo auch die exe liegt. Das Programm
kann ja nicht die ganze Festplatte nach der Datei durchsuchen. Wenn du
den passenden Ort nicht findest, kannst du auch mal eine Datei schreiben
und suchen, wohin die gespeichert wird.
ofstream Zieldatei;
Zieldatei.open("Datei");
Zieldatei<<"Hallo Welt";
Zeildatei.close();
So müsste das gehen, soweit ich mich erinnere.
Also ich hab jetzt mal den Code von Dussel genommen und es funktioniert.
Es wurde die Datei Datei erstellt und in dem Ordner abgelegt wo auch
die .exe ist. Der Unterschied ist jetzt, dass ich vorher die Datei
Datei_1.txt genannt habe und ich hab sie auch in dem Ordner der exe
abgelegt. Sie konnte aber trotzdem nicht aufgerufen werden.
Die jetzt erstellte Datei ist nicht von dem Typ txt. Aber die kann ich
auch wie gewohnt mit dem Editor öffnen und darin steht auch wie gewollt
Hallo Welt. Lag es vielleicht an dem Typ der Datei?
Naja. Die Datei wird ja auch ohne Endung erstellt.
> Zieldatei.open("Datei");
und nicht Zieldatei.open("Datei.txt");
Aber daran kanns wohl auch nicht liegen. Denn ich habe die Datei ja
jetzt erstellt. Und dann habe ich den Code genommen:
1
#include<iostream>
2
#include<fstream>
3
usingnamespacestd;
4
5
intmain(void)
6
{
7
ifstreamZieldatei;
8
Zieldatei.open("Datei.txt",ios_base::in);
9
if(!Zieldatei)
10
{
11
cerr<<"Eingabe-Datei kann nicht geöffnet werden\n";
12
}
13
14
cin.get();
15
}
Der Compiler führts aus. Der Error erscheint auch nicht, aber die Datei
öffnet sich nicht. Kann ein ganz blöder Fehler sein, aber ich komme
irgendwie nicht dahinter.
> Hast du auch "./datei" probiert?
Wie kommst du darauf, dass er Linux nutzt?
@ L. J. (luke1)
> Die jetzt erstellte Datei ist nicht von dem Typ txt
Erstze, besser füge hinzu, folgendes
1
Zieldatei.open("Datei");
durch
1
Zieldatei.open("Datei_1.txt");
'Vom Typ txt' ist die Datei im übrigen trotzdem, es fehlt halt nur die
Dateiendung.
Verrate uns bitte ein paar Dinge über das, was du da machst:
-Welches Betriebssystem?
-Arbeitest du mit einer IDE?
EDIT/Zu spät:
> Der Compiler führts aus. Der Error erscheint auch nicht, aber die Datei> öffnet sich nicht.
Das kannst du gar nicht wissen, denn du öffnest mit dem obigen Quelltext
die Datei und dann wartest du auf eine Benutzeingabe und dann bist raus
aus dem Programm ohne dass du irgendetwas mit der Datei gemacht hast.
Schreib erstmal ein paar Testausgaben in die Datei.
ifstream ist zum Lesen aus vorhandenen Dateien vorgesehen, open
funktioniert folglich nur, wenn die angegebene Datei auch existiert.
Soll hingegen eine Datei erzeugt werden und etwas in diese geschrieben
werden, muss ofstream verwendet werden, so wie es "Dussel" auch gemacht
hat.
Dessen Beispiel aber nennt die Datei nicht *.txt, das sollte also
entsprechend angepasst werden.
Ja ich habe beim Beispiel von Dussel .txt hinzugefügt. Klappt ja auch
wunderbar. Die Datei wird mit Hallo Welt erstellt. So und dann wollte
ich mit einem anderen Code die Datei wieder auslesen. Da habe ich
gedacht, dass es mit dem Code funktionieren müsste. Die Datei ist
schließlich in dem Ordner wo die ganzen .exe liegen vorhanden. Also
kurz: Ich habe zuerst mit Dussel's Codebeispiel eine Datei erstellt und
wollte mit der anderen die ich oben geschrieben habe die Datei wieder
auslesen.
Ich arbeite unter Windows XP mit DEV-C++.
Die Endung der erstellten Datei ist egal, es ging ja nur darum zu
wissen, wohin sie erstellt wird.
Da die Fehlermeldung nicht mehr ausgegeben wird, scheint das öffnen ja
geklappt zu haben. Jetzt musst du nur noch den Inhalt ausgeben (oder
anders verarbeiten). Mit der Ausgabe bin ich mir nicht mehr ganz sicher,
aber das ich glaube das geht zum Beispiel mit:
Dussel schrieb:
> Die Endung der erstellten Datei ist egal, es ging ja nur darum zu> wissen, wohin sie erstellt wird.
Vermutlich ins Arbeitsverzeichnis. Ne Idee wär auch, als Dateiname
'c:/test' oder sowas zu nehmen.
Das haben wir schon rausgefunden, ich wollte mich nur 'rechtfertigen',
dass ich der armen Datei keine Endung gegeben habe :)
Aber als Anmerkung: 'Quelldatei' muss in meinem Beispiel auch mit
ifstream geöffnet werden. Mein Beispiel ist nur das Einlesen und
Ausgeben des Dateiinhalts.
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.