mikrocontroller.net

Forum: PC-Programmierung Datei öffnen mit C++


Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
#include <iostream>
#include <fstream>
using namespace std;

int main(void)
{
    ifstream Quelldatei;                
    Quelldatei.open("Datei_1.txt", ios_base::in);
    if(!Quelldatei)
    {
       cerr<<"Eingabe-Datei kann nicht geöffnet werden\n";
    }

    cin.get();
}
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 :)

Autor: Dussel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sollte so funktionieren, nur dass das Programm so nichts sichtbares 
macht. Was passiert denn? Kommt die Fehlermeldung oder bricht schon das 
Kompilieren ab?

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, die Fehlermeldung kommt. Aber ich bin mir nicht sicher wo ich die 
Datei abspeichern muss. Oder ist das egal?

Autor: Dussel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Daniel (root) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du auch "./datei" probiert?

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Die jetzt erstellte Datei ist nicht von dem Typ txt

Das machst Du woran fest?

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
#include <iostream>
#include <fstream>
using namespace std;

int main(void)
{
    ifstream Zieldatei;                
    Zieldatei.open("Datei.txt", ios_base::in);
    if(!Zieldatei)
    {
       cerr<<"Eingabe-Datei kann nicht geöffnet werden\n";
    }

    cin.get();
}

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.

Autor: Link zu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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
Zieldatei.open("Datei");
durch
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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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++.

Autor: Dussel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
char c;
while(Quelldatei.get(&c))   
{
    cout<<c;
}

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Dussel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dussel dein Code war fast richtig. Man musste es so schreiben:
char c;
while(Quelldatei.get(c))   
{
    cout<<c;
}
Das & vor dem c war falsch aber trotzdem danke :) Ich habe das vor 
kurzem auf dieser Seite gefunden:
http://de.wikibooks.org/wiki/C%2B%2B-Programmierun...

Autor: Dussel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da habe ich mich dann vertan.
Funktioniert das Programm denn jetzt, wie es soll?

Autor: L. J. (luke1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jap. Genauso wie es soll. Darum ein fettes Danke an alle und vor allem 
an dir Dussel :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.