nicht-ascii-Dateien per Stream kopieren



  • Normalerweise geht das ja mit:

    //...
    char ch;
    while(ein.get(ch))
      aus.put(ch);
    //...
    

    Ich wollte versuchen ein Programm zu schreiben, das Dateinen codiert:

    //...
    char ch;
    while(ein.get(ch))
      aus.put(ch+4);     //muahahaha! das knackt niemand
      //zum decodieren "ch-4"
    //...
    

    Leider klappt das nur bei Textdateien (ansi). Bei allen Dateien hört das Programm bei einer '26' auf zu übersetzen.
    Das scheint die Konstante EOF zu sein.

    Wie kann ich denn auch andere Dateien lesen?



  • #include <fstream>
    
    using namespace std; 
    
    int main ()
    {
        ifstream ein ("lese.txt", ios::binary);
        ofstream aus ("schreibe.bin", ios::binary);
        char ch;
        while (ein.good ())
        {
            ein.read (&ch, 1);
            if (!ein.good ())
                break;
            ch += 4; //  :D genial!
            aus.write (&ch, 1);
        }
    }
    

    😉



  • Immer noch das gleiche Problem.
    Immer wenn eine 26 gelesen wird, wird die Schleife abgebrochen.

    Was macht denn .good() genau?
    Was gibt es noch für Methoden?

    Zum Beispiel zur Ermittlung der Größe der Datei.

    /*
    solange das Ende nicht erreicht ist:
      schreibe ein gelesenes Byte aus dat1 in dat2
    */
    

    //edit:
    Halt!!!
    Ich hab das "binary" übersehen!
    So funktioniert es. 👍 🙂


Anmelden zum Antworten