Datein öffnen schließen



  • Also ich hab mal wieder ne einfach Frage 😢

    Nach folgendem Programmcode müsste bei folgender Eingabe
    ->bsp10077.cpp*
    Datei existiert!

    kommen. Bei mir geht des jedenfalls net, und jetzt wollte ich fragen ob ich einen Programmfehler drinnen hab oder ob des Buch da falsch liegt. Es kann doch auch gar keine Datein geben mit einem * zum schluß oder?

    #include <fstream>
    #include <iostream>
    using namespace std;
    
    int main() {
        char datei [128];
        ifstream test;
        cout << "Dateiname: "<< flush;
        cin.getline(datei, 127, '*');
        test.open(datei, ios_base::in);
        if(test.good())
        cout << "Datei exisitert!" << endl;
        else
        cout << "Datei ist nicht vorhanden!" << endl;
        fflush(stdin);
        getchar();
        return 0;
    }
    


  • Hallo,

    Schüler schrieb:

    Also ich hab mal wieder ne einfach Frage 😢

    Nach folgendem Programmcode müsste bei folgender Eingabe
    ->bsp10077.cpp*
    Datei existiert!

    Nur wenn du die Datei vorher per Hand angelegt hast. 😉

    kommen. Bei mir geht des jedenfalls net, und jetzt wollte ich fragen ob ich einen Programmfehler drinnen hab oder ob des Buch da falsch liegt. Es kann doch auch gar keine Datein geben mit einem * zum schluß oder?

    Nein das nicht, aber du ließt ja auch nur den Dateinamen ein bis zum -Zeichen. Dieses wird jedoch nicht auch noch in das char-Array datei geschrieben. D.h. konkret das bei Eingabe von 'test.txt' letzendlich nur der String 'test.txt' in datei steht.

    'Ansonsten' sehe ich keinen Fehler im Programm.

    Caipi



  • wenn ich die datei aber anlege und dann suchen lasse, passiert nix mehr.
    Hab ich da jetzt was falsch gemacht.Gebe ich die suchdatei mit * an sagt er die datei exestiert net.



  • Also Nochmal: 🙂

    Folge _genau_ diesem 'Plan'. Wenn es bei dir dann immer noch nicht funktioniert, dann weiß ich auch nicht weiter.

    1. Erstelle eine Datei namens 'test.txt' im gleichen Ordner in dem auch dein Programm ist.
    2. Starte das Programm und gebe 'test.txt*' ein.
    

    Es sollte nun der Text 'Datei existiert' ausgegeben werden.

    Caipi



  • yo ging jetzt.
    aber mal ne andere Frage.

    cin.getline(datei, 127, '*');
    

    warum sagt man hier nicht einfach

    cin >> datei[50];
    

    Ich würde da doch auch in den array einlesen.



  • Nö, du willst von datei[0] bis datei[49] einlesen, so liest du aber ab datei[50] ein.



  • achso okay danke.
    Und jetzt hab ich noch ne frage zu einem Befehl. Leider wird der sehr schnell im Buch mit eingeführt, was mir des verstehen weng erschwert.

    [cpp]
    #include <iomanip>
    using namespace std;

    int main() {
    int i=1;
    char zeile[250], datei[50];
    cout << "Dateiname: " << flush;
    cin.get(datei,50);
    ifstream eingabe(datei,ios::in);
    if(eingabe.good()) {
    eingabe.seekg(0L,ios::end);
    cout << "Datei: " << datei << "\t"
    << eingabe.tellg() << "Bytes"
    << endl;
    for (int j=0; j<80; j++)
    cout << "_";
    cout << endl;
    eingabe.seekg(0L, ios::beg);
    while (!eingabe.eof()) {
    eingabe.getline(zeile,250);
    cout << setw(2) << i++
    << ":" << zeile << endl;
    }
    }
    else
    cout << "Dateifehler oder Datei nicht gefunden!"
    << endl;
    fflush(stdin);
    getchar();
    return 0;
    } [/cpp]

    #include <iostream>
    #include <fstream>
    #include <iomanip>
    using namespace std;
    
    int main() {
        char datei[]="test.text";
    
        cout << "Programmstart" << endl;
    
        ofstream ausgabe;
        ausgabe.open(datei,ios::out);
        if(ausgabe.good()) {
            ausgabe.seekg(0L, ios::end);
            cout << "Datei: " << datei << "\t"
                 << eingabe.tellg() << "Bytes"
                 << endl;
            for (int j=0; j<80; j++)
            cout << "_";
            cout << endl:
            }
            else 
            cout << "Dateifehler oder Datei nicht gefunden!"
                 << endl;    
    
        /*ausgabe.close();
        if (ausgabe.good())
        cout << "Datei " << datei << " konnte geschlossen werden."
             << endl;*/
    
        cout << "Programmende" << endl;
        fflush(stdin);
        getchar();
        return 0;
    }
    

    Warum geht denn der Befehl seekg im zweiten Beispiel net? Liegt des an Ein und Ausgabeobjekt?



  • seekg(offset, position) setzt den Eingabestrom auf eine bestimmte Stelle in der Datei. In deinem Fall ist das der Dateianfang (ios::beg) und noch 0 weitere Bytes weiter (0L).

    Bei ofstream heißt es nicht mehr seekg, sondern seekp.



  • yep des problem ist behoben.
    und wie ist das mit

    tellg
    

    geht des auch nur bei ifstream?



  • @Schüler:
    Und btw: seekg()/seekp() sind Funktionen bzw. Methoden und keine Befehle.

    Caipi



  • ja okay falsch ausgedrückt. Und wie ist das jetzt bei der letzten beschriebenen Methode?



  • Die Funktion tellg() liefert einen long der Aktuelle Position des Dateizeigers (Get-Zeigers) relativ zum Dateianfang.
    Die Funktion tellp() macht das gleiche mit dem Put-Zeiger.

    Caipi


Anmelden zum Antworten