Frage zur Arbeit mit Streams.



  • Hi,

    ich hab ein kleines script gecodet das wie folgt aussieht:

    int i;
    
      ifstream file("test3.txt", ios::binary);
      if(!file)
      {
        ShowMessage("Fehler bei open");
      }
      else
      {
       Memo1->Lines->Add("Datei wird geöffnet ...");
      }
    
      /*
        Stream Beispiel:
        ----------------
    
         |0|1|2|3|4|5|....
    
         Beim öffnen eines Streams befindet sich der Zähler am Anfang der Datei  (in dem Fall Stream 0).
         Nach jedem Lesevorgang wird er um eine Position verschoben (Stream ++).
    
         Der Befehl,
           file.read(Buffer, Size);
           file.read(char*)&i,sizeof(i));
         bedeutet soviel wie lese denn aktuellen Stream mit der Größe von sizeof(int) [4 Byte]
         und wandle denn Inhalt (&i) in einen Chartyp (char*) um.
    
    i hat nun denn Inhalt des aktuellen Streamzeichens.
    
      */
    
      file.read((char*)&i,sizeof(i));
    
      while(file)   // solange kein Fehler (im Falle EOFn ist file == false)
      {
       Memo1->Lines->Add(i);
       file.read((char*)&i,sizeof(i));
      }
    
      if(!file.eof())
      {
        ShowMessage("Fehler beim lesen des Streams");
      }
      else
      {
        Memo1->Lines->Add("EOF erreicht. Datei wird geschlossen ...");
        file.close();
      }
    

    Inhalt "test3.txt"

    1234567890
    

    Ausgabe Memo1:

    Datei wird geöffnet ...
    875770417
    943142453
    EOF erreicht. Datei wird geschlossen ...
    

    Fragen:

    1.) Kann mir nun mal jemand sagen was das für Zahlen sind und wie die zusammenkommen ?

    2.) Kann mir jemand

    (char*)&i
    

    erklären ?

    Danke

    Gruß
    Binary



  • Schau mal hier:

    http://www.c-plusplus.net/forum/viewtopic.php?t=39469

    (char*)&i

    bedeutet: Die Adresse von i (hart) gecastet auf einen Zeiger vom Typ char



  • ok, ich les mir denn artikel mal durch.
    kannst du mir auch sagen was der inhalt von i der oben ausgegeben wird zu bedeuten hat ?



  • Da ich nicht weiß was Memo1 ist und was Add() erwartet kann ich Dir da keine Antwort geben



  • file.read((char*)&i,sizeof(i)); 
    
      while(file)   // solange kein Fehler (im Falle EOFn ist file == false) 
      { 
       Memo1->Lines->Add(i); 
       file.read((char*)&i,sizeof(i)); 
      }
    

    inhalt der datei ist "1234567890" ...



  • Wenn du, 123456789 in der Datei stehen hast, und dann
    dies Binär einliest, dann liest du in ein int(4Byte)
    jeweils 4 zeichen, d.h. du liest beim ersten mal
    nicht 1 sondern 1234 aus, welches dann binär in das int
    gehauen wird. Beim zweitenmal liest du wieder 4 Byte usw.
    Wenn du die Zahlen 1 -9 haben willst, solltest du gleich mit
    einem char auslesen, und das dann nach int casten.

    Devil



  • Frage schrieb:

    Da ich nicht weiß was Memo1 ist und was Add() erwartet kann ich Dir da keine Antwort geben

    Antwort schrieb:

    file.read((char*)&i,sizeof(i)); 
     
      while(file)   // solange kein Fehler (im Falle EOFn ist file == false) 
      { 
       Memo1->Lines->Add(i); 
       file.read((char*)&i,sizeof(i)); 
      }
    

    inhalt der datei ist "1234567890" ...

    :???:


Anmelden zum Antworten