verstehe ifstream/ofstream



  • Hallo
    Also wie ich mit ifstream eine Datei einlesen kann ist mit klar auch eine neue Datei mit ofstream kann ich erstellen, doch wie bekomme ich meine Datein in die neue datei ???

    bei FILE * gehts ja mit fwrite (inhalt , 1 , zeichen , stream);
    auch fprintf geht ja nun nicht mehr!
    Nun komme ich überhaupt nicht klar wie ich das unter ofstream nutze bekomme dort nur Fehler und so richtig was zum lesen habe ich auch noch nicht gefunden .
    Klar ist mit das ich file nicht mehr nutze und das dies nun nicht mehr so ghen kann aber wie gehts????
    Danke für eure Hilfe
    MFG COOPER
    😕





  • oder auch hier das kapitel ueber dateizugriff:
    http://www.mathematik.uni-marburg.de/~cpp/streams/index.html

    (ein deeplink ist leider nicht moeglich..)



  • Hi
    Ja danke das habe ich gesucht die zeile!
    OutFile << kdNummer << " " << usatz << endl;
    ist die lösung meines Problems 🙂

    Schön nun habe ich in meine Datei auch mal was drin stehen ist zwar noch nicht das was drin stehen sollte aber es geht weiter !!!
    DANKE SCHÖNNNNNNNNNNNN!!!!

    MFG COOPER



  • Also mein Testprogramm geht nun soweit! auch das einlesen der datei ist ok 🙂
    Das schreiben ist mir nun auch klar nur wieso zum Teufel schreibt es nicht das was es soll ?
    Ich bekomme noch ein ....
    also normal soll es in der neuen Datei Name ZAHLEN1.txt denn verschlüsselten Text schreiben doch dort schreibt es nur müll rein !!! Wieso was ist hier falsch ?

    #include <iostream>
    #include <cstdlib>
    #include <fstream> // !!! brauch ich sicher nicht 
    #include <cstdio>
    #include <sstream>
    using namespace std;
    void encrypt(istream& input, ostream& output, int key);
    int main()
    {
        int schluessel; // schluessel ist die verschiebung
        // Versuche, eine quelldatei zu öffnen
        ifstream quelldatei("/home/cooper3210/Documents/ZAHLEN.txt");
    	if(quelldatei.good()) cout << "Datei Gefunden und geladen " << endl; //wenn datei gefunden
        if (!quelldatei)
        {
            cout << "Datei existiert nicht!\n";
             return(1);
        }
    
        cout <<"\n Um wie viele Stellen (0-25) verschieben: ";
        cin >> schluessel;
        cin.ignore(32768, '\n');
    
        stringstream ss;
    
        // Lies die quelldatei, und schreibe nach ss
        encrypt(quelldatei, ss, schluessel);
        cout << "Verschluesselt: " << endl;
        cout << ss.str() << endl;
    
        cout << "Wieder entschluesselt: " << endl;
        encrypt(ss, cout, -schluessel);
    	ofstream output("/home/cooper3210/Documents/ZAHLEN1.txt");
    	///////////////////////////neu/////////////////////////////
         // Fehler abfangen
         if (!output)
            {
                cout << "Fehler beim Erstellen der Datei!\n";
                exit (1);
            }
    		cout << "testlauf schreiben \n";
    	//////////????????????????????????????????????????????????????	
           output << schluessel << " Schluessel " << endl;
    		output << ss << endl;
    	/////////?????????????????????????????????????????????????????	
    
    		/////////////////////////neu ende/////////////////////////
    
     //system("PAUSE");
        return 0;
    }
    
    void encrypt(istream& input, ostream& output, int key) {
        char buffer[255];
        input.getline(buffer,sizeof(buffer));    
        char *p = buffer;
        while (*p) //lesen solange zeichen vorhanden....
        {
            // 'a' und 'z' sind besser lesbar als die ASCII-Codes
            if (*p>='a' && *p<='z') {
                int x = (*p-'a'+key)%26;
                // Falls etwas negatives rauskam: Positiv machen!
                if (x<0) x+=26;
                *p=x+'a';
            }
            if (*p>='A' && *p<='Z') {
                int x = (*p-'A'+key)%26;
                if (x<0) x+=26;
                *p=x+'A';
            }
            p++;
        }
        output << buffer << endl;
    }
    

    Also ich verstehe es nicht denn schlüssel schreibt es doch auch rein " mit output << -schluessel << " Schluessel " << endl; doch wie bekomme ich es hin das der text drin steht !!!
    langsam komme ich mir echt blöd vor lerne zwar viel dabei doch mit dem verstehen ist das so eine sache :-).
    MFG danke für ein tipp



  • Habe mein Fehler gefunden !!!!!!!!!!!

    so was blödes Schreibfehler gehabt und immer wieder übersehen!!
    //////////????????????????????????????????????????????????????
    output << schluessel << " Schluessel " << endl;
    output << ss.str() << endl;
    /////////?????????????????????????????????????????????????????
    das wäre es !!!!!!!
    Super danke aber für eure hilfe!!!!
    MFG COOPER 🤡



  • Funktioniert die Encrypt Funktion? Bei der steig ich nicht ganz durch, warum du was gemacht hast. Könntest du mir das vielleicht bitte erklären?
    Dazu noch: Nach

    char buffer[n]
    

    ist

    buffer
    

    ein Zeiger auf das erste Element des Arrays und

    *(buffer + n)
    

    das n'te Element. Vielleicht besser als einen extra Zeiger zu nutzen.



  • Hallso ich habe dort Hilfe von ein netten User gehabt der mir gesagt hat das es besser wäre das ganze in ACSII zu machen.
    Das Problem ist der buffer muss eh noch raus denn was ist wenn eine Datei mal etwas grösser ist :-).
    Also das war auch noch nicht die aufgabe denn ich habe es am Anfang total anders gemacht aber so geht es eben auch und habe die Idee erst mal so übernommen.

    werde mir das sicher noch richtig anschauen doch mir ging es erst mal in der Hauptsache zu lernen die ich lese und schreibe unter c++.
    im mom hänge ich aber im Problem Fehler Meldung ausgeben, aber als beep .
    Also als text ist es ja kein Problem aber mit beep schon unter linux .
    Ich muss nun erst mal verstehen wieso ich diesen windows.h header dort brauche und wie ich ihn unter linux bekomme.
    mfg cooper


Anmelden zum Antworten