Datein öffnen schließen



  • 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